2012-10-03 224 views
0

我写了一个查询。此查询从2个不同的表中总结字段。并按主表ID字段进行分组。但是第二个左外连接没有分组,给了我不同的结果。左外连接和按问题分组

SELECT s.*, 
     f.firma_adi, 
     sum(sd.fiyat) AS konak, 
     sum(ss.fiyat) AS sponsor 
FROM fuar_sozlesme1 s 
     INNER JOIN fuar_firma_2012 f 
     ON (s.cari = f.cari) 
     LEFT OUTER JOIN fuar_sozlesme1_detay sd 
     ON (sd.sozlesme_id = s.id) 
     LEFT OUTER JOIN fuar_sozlesme1_sponsor ss 
     ON (ss.sozlesme_id = s.id) 
GROUP BY s.id 
ORDER BY s.id DESC 

我知道,这真的很复杂,但我正在关注这个问题。 我的问题是:为什么第二个left outer join是不正确的总和字段。如果我删除第二个left outer join或第一个,则一切正常。

+0

你能举一个你的表结构的快速例子,看看你有什么列,也许每个表的一个行的例子 –

+0

在派生表中进行求和和分组,然后把外部连接留在那里。 –

+0

可能重复的[当我加入第二个表时不正确的总和](http://stackoverflow.com/questions/12620802/incorrect-sum-when-i-join-a-second-table) –

回答

3

问题是您的数据有多个维度,行数超出了您的预期。我建议你为一个id运行查询,而不要通过group来查看连接生成的行。解决这个问题

一种方式是通过使用相关子查询:

select s.*, f.firma_adi, 
     (select SUM(sd.fiyat) 
     from fuar_sozlesme1_detay fd 
     where sd.sozlesme_id = s.id 
     ) as konak, 
     (select SUM(ss.fiyat) 
     from fuar_sozlesme1_sponsor ss 
     where (ss.sozlesme_id = s.id) 
     ) as sponsor 
from fuar_sozlesme1 s inner join 
    fuar_firma_2012 f 
    on (s.cari = f.cari) 
order by s.id DESC 

顺便说一句,您可以通过使用MySQL(因为你的查询是不以任何其他方言可以解析)出现。你应该用你正在使用的数据库版本来标记你的问题。

+0

@戈登感谢很多。你的答案是我的答案的解决方案。但是我删除了这一行:'sum(sd.fiyat)as konak,sum(ss.fiyat)as sponsor' –

+0

@YasinYörük。 。 。我很抱歉。我错过了那条线。 –