簡體   English   中英

MYSQL 沒有針對另一個表的不同 id 獲得總和零值(沒有該 id 的條目)

[英]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 JOINRIGHT 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.

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