簡體   English   中英

選擇內部聯接返回錯誤結果

[英]Select inner join returns wrong result

我正在使用如下所示的選擇內部聯接。 如何獲得預期的結果?

這是sql語法:

select tgr.id, tgr.venid, sum(tgrd.qty*tgrd.pri), sum(tgrp.amo)
from tgr inner join tgrd on tgr.id = tgrd.id
inner join tgrp on tgr.id = tgrp.id
where tgr.id = 3
group by tgr.id, tgr.venid
having sum(tgrd.qty*tgrd.pri)-sum(tgrp.amo)>0;

結果:

3 | 1 | 462000 | 262000

但我期待結果:

3 | 1 | 231000 | 131000

來自3個表格的來源:tgr,tgrd,tgrp

tgr table
id  venid
3   1

tgrd table
id  plu qty pri
3   2   2.7 45000
3   1   7.3 15000

tgrp table
id  type  amo
3   2     0
3   2     131000

任何幫助將不勝感激。

因為從tgrtgrdtgrp多對多的關系, tgr需要在JOIN表之前執行聚合,否則可以對每個值加倍(或更多)。 該查詢將為您提供所需的結果:

select tgr.id, tgr.venid, total, amo
from tgr 
inner join (select id, sum(qty*pri) as total
            from tgrd
            group by id) tgrd on tgr.id = tgrd.id
inner join (select id, sum(amo) as amo
            from tgrp
            group by id) tgrp on tgr.id = tgrp.id
where tgr.id = 3
group by tgr.id, tgr.venid
having total - amo > 0;

輸出:

id  venid   total       amo
3   1       231000.00   131000

3v4l.org上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM