2012-10-03 222 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。 。 。我很抱歉。我錯過了那條線。 –