[英]MYSQL not getting the sum zero values (having no entries of that id) against distinct id of another table
SELECT d.millid, d.bookno, d.partyname, d.count,
d.counttype, d.orderqty, d.dispqty, d.pending
from ( SELECT b.millid, b.count, b.counttype, b.bookno, b.partyname,
COALESCE(b.bags,0) as orderqty,
COALESCE(sum(y.bags),0) as dispqty,
COALESCE((b.bags-sum(y.bags)),0) as pending
from yarnDispatch y
JOIN yarnbook b ON b.bookno=y.bookno
GROUP by b.bookno) d
WHERE d.pending>0
ORDER BY d.millid, d.bookno
在此查詢中,表 yarnbook 是主表,具有從 1 到 2600(及以上)的唯一 bookno(Booking Nos),而其他表 yarndispatch 對每個相同的 bookno(yarnbook)有多個或零個調度(包)條目。
當我運行此查詢時,在針對 bookno 至少有單個調度條目的情況下給出正確的結果,但在 yarndispatch 表中沒有調度條目的情況下不給出 (sum(bags) as 0)。
請分享您的觀點/解決方案。
您需要執行外連接,它在一個表有數據而另一個表沒有數據的情況下保留數據,而不是只在兩個表中都存在數據時才返回行的內連接。
說JOIN
相當於INNER JOIN
。 將JOIN
替換為LEFT OUTER JOIN
,您的結果應該更符合您的要求。
您需要LEFT JOIN
或RIGHT JOIN
來獲取“空”行
SELECT d.millid, d.bookno, d.partyname, d.count,
d.counttype, d.orderqty, d.dispqty, d.pending
from ( SELECT b.millid, b.count, b.counttype, b.bookno, b.partyname,
COALESCE(b.bags,0) as orderqty,
COALESCE(sum(IFNULL(y.bags,)),0) as dispqty,
COALESCE((b.bags-sum(y.bags)),0) as pending
from yarnDispatch y
RIGHT JOIN yarnbook b ON b.bookno=y.bookno
GROUP by b.bookno) d
WHERE d.pending>0
ORDER BY d.millid, d.bookno
兩種連接都可以互換,但有些人更喜歡LEFT JOIN
SELECT d.millid, d.bookno, d.partyname, d.count,
d.counttype, d.orderqty, d.dispqty, d.pending
from ( SELECT b.millid, b.count, b.counttype, b.bookno, b.partyname,
COALESCE(b.bags,0) as orderqty,
COALESCE(sum(IFNULL(y.bags,0)),0) as dispqty,
COALESCE((b.bags-sum(y.bags)),0) as pending
from
yarnbook b
LEFT JOIN yarnDispatch y ON b.bookno=y.bookno
GROUP by b.bookno) d
WHERE d.pending>0
ORDER BY d.millid, d.bookno
感謝您的寶貴回復;
我試過以下查詢,它正在工作;
SELECT
d.millid,
d.bookno,
d.partyname,
d.count,
d.counttype,
d.orderqty,
d.dispqty,
(d.orderqty - d.dispqty) AS pending
FROM
(
SELECT
b.millid,
b.count,
b.counttype,
b.bookno,
b.partyname,
COALESCE(b.bags, 0) AS orderqty,
Y.bags,
COALESCE(SUM(Y.bags),
0) AS dispqty
FROM
yarnDispatch Y
RIGHT JOIN yarnbook b ON
b.bookno = Y.bookno
GROUP BY
b.bookno
ORDER BY
b.millid,
b.bookno
) d
WHERE
(d.orderqty - d.dispqty) > 0
ORDER BY
d.millid,
d.bookno
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.