MySQL双左联接双打结果更改列总和结果

时间:2018-08-03 15:51:35

标签: mysql sql join left-join

我想在一个结果中保留三个表的连接,而当我这样做时:http://sqlfiddle.com/#!9/546c24/2我的结果是错误的。

我希望COUNT(Test2.id)2,而SUM(Test3.positive)3,而不是两者都是。

那是我的问题。我希望这是可以理解的。

1 个答案:

答案 0 :(得分:2)

每个test1.id都将得到笛卡尔积。您需要在JOIN之前 进行汇总:

SELECT t1.id,Test1.name, t2.cnt_2,
       t3.sum_pos, t3.sum_neg
FROM Test1 t1 LEFT JOIN
     (SELECT ID_Test1, COUNT(*) as cnt_2
      FROM Test2
      GROUP BY ID_Test1
     ) t2
     ON t1.id = t2.ID_Test1 LEFT JOIN
     (SELECT ID_Test1, SUM(positive) as sum_pos, SUM(negative) as sum_neg
      FROM Test3
      GROUP BY ID_Test1
     ) t3
     ON t1.id = t3.ID_Test1
GROUP BY t1.id;

Here是SQL Fiddle。