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 

我知道,这真的很复杂,但我坚持这个问题。我的问题是:为什么 secondleft outer join不是正确 sum of field 。如果我删除第二个left outer join或第一个,一切正常。

4

1 回答 1

3

问题是您的数据有多个维度,并且行数成倍增加超出了您的预期。我建议您在不使用 group by 的情况下对一个 id 运行查询,以查看连接产生了哪些行。

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

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

于 2012-10-03T13:56:45.010 回答