搜尋

首頁  >  問答  >  主體

子查詢在我的查詢中總是會有結果

我在MySQL中有兩個表:

表1 - WORKORDERS

ID 數量
1 2
2 1

表2 - ITEMSINWORKORDERS

# 工作訂單112
ID
1
2
3

我有一個查詢:

SELECT WORKORDERS.ID
      , WORKORDERS.QUANTITY AS NOMINAL_QTY
      , COUNT(ITEMSINWORKORDERS.WORKORDER) AS ENTERED_QTY
FROM  WORKORDERS JOIN ITEMSINWORKORDERS ON
         ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
WHERE WORKORDERS.QUANTITY >
        ( SELECT COUNT(ITEMSINWORKORDERS.WORKORDER )
          FROM   WORKORDERS INNER JOIN ITEMSINWORKORDERS ON
                    ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
        )

最初,我在語句中使用了左外連接,所以我將其改為內連接,希望得到一個空集。如何使其在沒有任何缺失條目的工作訂單時返回一個空集合?

這個查詢的目的是找到所有未輸入所有條目的工作訂單,並且在WORKORDERS表中輸入的標稱數量大於與該工作訂單對應的ITEMSINWORKORDERS記錄的數量。我期望回傳一個空集合。但實際上,我得到的是ENTERED_QTY0
ID NOMINAL_QTY
NULL NULL

最初,我在語句中使用了左外連接,所以我將其改為內連接,希望得到一個空集。

補充:

我嘗試使用NULLIF來解決這個問題,如下:

SELECT WORKORDERS.ID
    , WORKORDERS.QUANTITY AS NOMINAL_QTY
    , NULLIF(COUNT(ITEMSINWORKORDERS.WORKORDER), 0) AS ENTERED_QTY
FROM WORKORDERS JOIN ITEMSINWORKORDERS ON
    ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
WHERE WORKORDERS.QUANTITY >
    ( SELECT COUNT( ITEMSINWORKORDERS.WORKORDER )
    FROM WORKORDERS INNER JOIN ITEMSINWORKORDERS ON
        ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID
    )
但我得到的結果令人沮喪:ENTERED_QTYNULL
ID NOMINAL_QTY
NULL NULL

######
P粉677684876P粉677684876443 天前520

全部回覆(1)我來回復

  • P粉269847997

    P粉2698479972023-09-12 20:45:22

    我不知道你期望什麼,因為你的查詢沒有回傳任何行。

    但是要讓計數工作,你需要使用GROUP BY

    db<>fiddle 在這裡

    回覆
    0
  • 取消回覆