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

我在MySQL中有兩個表:

表1 - WORKORDERS

ID 數量
1 2
2 1

表2 - ITEMSINWORKORDERS

# 工作訂單 1 1 2
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_QTY 0
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_QTY NULL
ID NOMINAL_QTY
NULL NULL

######
P粉677684876
P粉677684876

全部回覆 (1)
P粉269847997

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

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

db<>fiddle在這裡

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