2015-08-28 52 views
0

我有点困惑这个简单的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`) 

它返回的输出:

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

其实我预计,从统计列将被添加到输出。但他们不是。当我只需拨打统计-SELECT查询我得到这样的输出:

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

我想不通为什么这是行不通的。我希望你们能帮助我。 谢谢!

+0

将出现在输出中的字段在查询的'SELECT'部分中定义。 – Bulat

+0

那么,你实际上并没有添加任何从'Stats'表到'SELECT' ... – Siyual

+0

你没有选择它们'SELECT 'user'.'id', 'user'.'name'' 如果您希望您的子查询字段需要在main select子句中选择它们,那么这些是您正在选择的字段。 – cerkiewny

回答

2

你必须从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`) 
+0

谢谢!有用 :) – user3804188

0

你有两个集。首先是用户,第二是统计。你先是多个秒。首先将所有行都排在第二行。如果您更改设置的顺序而不是保留相同的结果,因为基本行(来自表之后)不等于连接的行(在左连接子查询之后)。结果保留来自表/子查询的所有行。 我建议你改变转置两套。

相关问题