左外连接和按问题分组

时间:2012-10-03 13:08:28

标签: sql

我写了一个查询。此查询汇总来自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或第一个,则一切正常。

1 个答案:

答案 0 :(得分:3)

问题是您的数据有多个维度,行数超出预期。我建议您运行一个id的查询,而不使用group by,以查看连接正在生成哪些行。

解决此问题的一种方法是使用相关子查询:

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(因为你的查询在任何其他方言中都无法解析)。您应该使用您正在使用的数据库版本标记您的问题。