0

クエリを書きました。このクエリは、2 つの異なるテーブルのフィールドを合計します。そして、メイン テーブル ID フィールドごとにグループ化されます。しかし、2番目の左外部結合はグループ化されておらず、異なる結果が得られます。

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 でないのかということです。2番目または1番目を削除するleft outer joinと、すべて正常です。

4

1 に答える 1

3

問題は、データに複数のディメンションがあり、行数が予想を超えて増加していることです。group byを使用せずに、1つのIDに対してクエリを実行して、結合によって生成されている行を確認することをお勧めします。

これを修正する1つの方法は、相関サブクエリを使用することです。

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 に答える