/ / Left outer join e group by issue - sql

Junção externa esquerda e grupo por edição - sql

Eu escrevi uma consulta. esta consulta soma campos de 2 tabelas diferentes. E agrupado pelo campo de ID da tabela principal. Mas a segunda junção externa esquerda não está agrupada e me dá resultados diferentes.

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

Eu sei, é muito complicado, mas eu estou me metendo nessa questão. Minha pergunta é: por que segundo left outer join não é corretamente a soma do campo. Se eu remover o segundo left outer join ou primeiro tudo é normal.

Respostas:

3 para resposta № 1

O problema é que você tem várias dimensõesem seus dados, e o número de linhas está se multiplicando além do esperado. Sugiro que você execute a consulta para um ID, sem o grupo por, para ver quais linhas a associação está produzindo.

Uma maneira de corrigir isso é usando subconsultas correlacionadas:

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

A propósito, você parece usar o MySQL (porque sua consulta não é analisável em nenhum outro dialeto). Você deve marcar suas perguntas com a versão do banco de dados que está usando.