再添加一个表后,列之间会相乘

时间:2016-01-13 08:25:58

标签: mysql

我想在我的查询中再添加一个表,这个表很好用。但是在添加该表之后会出现问题,我无法弄清楚为什么会发生这种情况。

查询效果很好

SELECT a.ArtId, a.ArtSifra, a.ArtNaziv,a.ArtRoditelj, a.ArtStanjeSA, a.ArtKategorija, a.ArtMjera, sum(b.artpaletatrenutnostanje) as palete, 
(a.artstanjesa + sum(b.artpaletatrenutnostanje)) AS ukupno,c.JmOznaka  
FROM artikli a 
JOIN artikli_palete_ulaz b on a.ArtID = b.ArtPaletaArtikal 
JOIN jedmj c ON a.ArtMjera = c.JmId  
WHERE a.ArtRoditelj != 0 AND a.ArtAktivan != 0 
GROUP BY a.ArtId  
ORDER BY a.ArtId ASC

查询2未显示良好结果

SELECT a.ArtId, a.ArtSifra, a.ArtNaziv,a.ArtRoditelj, a.ArtStanjeSA, a.ArtKategorija, a.ArtMjera, sum(b.artpaletatrenutnostanje) as palete, 
(a.artstanjesa + sum(b.artpaletatrenutnostanje)) AS ukupno,c.JmOznaka, sum(d.Izlaz) as promet  
FROM artikli a 
JOIN artikli_palete_ulaz b on a.ArtID = b.ArtPaletaArtikal 
JOIN jedmj c ON a.ArtMjera = c.JmId  
JOIN kartica_artikla_2015 d ON a.ArtId = d.Artikal
WHERE a.ArtRoditelj != 0 AND a.ArtAktivan != 0 AND d.VrstaDokumenta != 18
GROUP BY a.ArtId  
ORDER BY a.ArtId ASC

在查询2中,如上面的代码所示,我添加了表kartica_artikla_2015。添加该表后,列" palete"和" ukupno"显示他们繁殖不好的结果。专栏" promet"也没有给出好的结果。

我想知道什么可能导致这个问题,如果有人有任何建议如何解决问题。

1 个答案:

答案 0 :(得分:0)

可能是因为kartica_artikla_2015.Artikal中有一个以上的artikli.ArtId值。 在您的情况下解决此问题的一种方法是使用EXISTS。 所以,而不是

JOIN kartica_artikla_2015 d ON a.ArtId = d.Artikal
WHERE a.ArtRoditelj != 0 AND a.ArtAktivan != 0 AND d.VrstaDokumenta != 18

WHERE a.ArtRoditelj != 0 AND a.ArtAktivan != 0 AND EXISTS (
  SELECT 1 FROM kartica_artikla_2015 d
  WHERE a.ArtId = d.Artikal AND d.VrstaDokumenta != 18
)

修改:我刚刚注意到您还在从kartica_artikla_2015中选择一列。使用我的解决方案,因为您不再加入该表,您需要另一种方法。例如,您可以使用sum(d.Izlaz) as promet

代替(SELECT SUM(d.Izlaz) FROM kartica_artikla_2015 d WHERE a.ArtId = d.Artikal) as promet