这个简单的左连接操作不起作用,但为什么呢?

This simple left join operation doesn't work, but why?

我对这个简单的 mysql-查询有点困惑:

SELECT 
    `user`.`id`,
    `user`.`name`
 FROM 
    `#__users` `user`
 LEFT JOIN 
    (SELECT 
        `_s`.`userId`,
        SUM(`_s`.`fild12`) AS `fild12`,
        SUM(`_s`.`fild13`) AS `fild13`
     FROM 
        `#__logbookEventdata` `_s`
     GROUP BY `_s`.`userId`) `stats`
 ON 
    (`stats`.`userId`=`user`.`id`)

它returns这个输出:

id  | name
----+-------------
291 | bla
289 | Super User
290 | user1

实际上我预计 stats 中的列会添加到输出中。但他们不是。当我简单地调用 stats-SELECT-query 时,我得到这个输出:

 userId | fild12 | fild13   
--------+--------+--------
289     |15      |0
290     |0       |0

我不明白为什么这不起作用。我希望你们能帮助我。 谢谢!

您必须将 stats 中的字段添加到主 select:

SELECT 
    `user`.`id`,
    `user`.`name`,
    `stats`.*
FROM 
`#__users` `user`
LEFT JOIN 
    (SELECT 
        `_s`.`userId`,
        SUM(`_s`.`fild12`) AS `fild12`,
        SUM(`_s`.`fild13`) AS `fild13`
     FROM 
        `#__logbookEventdata` `_s`
     GROUP BY `_s`.`userId`) `stats`
ON 
    (`stats`.`userId`=`user`.`id`)

你有两套。首先是用户,其次是统计数据。你从第一到第二。首先是所有行,然后是所有行。如果您更改设置的顺序而不是保持相同的结果,因为基行(在 table 之后)与连接的行(在左连接子选择之后)不相等。结果将所有行保留在 table/subquery 之前。 我建议你改变转置两组。