子查詢在我的查詢中總是會有結果
P粉677684876
P粉677684876 2023-09-11 22:06:01
0
1
460

我在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粉677684876
P粉677684876

全部回覆(1)
P粉269847997

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

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

db<>fiddle 在這裡

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!