我在 MySQL 中有兩個表:
表 1 - 工單
| ID | 數量 |
|---|---|
| 1 | 2 |
| 2 | 1 |
表 2 - 專案工單
| ID | 作業指示 |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
我有一個查詢:
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 中的記錄數。我希望回傳一個空集。相反,我得到
| ID | NOMINAL_QTY | 已輸入_數量 |
|---|---|---|
| 空值 | 空值 | 0 |
最初,我的陳述句中有一個左外連接,所以我將它切換到內連接,希望得到一個空集。
附錄: 我嘗試使用 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
)
我得到的是令人沮喪的:
| ID | NOMINAL_QTY | 已輸入_數量 |
|---|---|---|
| 空值 | 空值 | 空值 |
uj5u.com熱心網友回復:
我不知道您期望什么,因為您的 qiery 沒有提供任何行。
但是要讓 count 作業,你需要一個GROUP BY
CREATE TABLE WORKORDERS ( `ID` INTEGER, `QUANTITY` INTEGER ); INSERT INTO WORKORDERS (`ID`, `QUANTITY`) VALUES ('1', '2'), ('2', '1'); CREATE TABLE ITEMSINWORKORDERS ( `ID` INTEGER, `WORKORDER` INTEGER ); INSERT INTO ITEMSINWORKORDERS (`ID`, `WORKORDER`) VALUES ('1', '1'), ('2', '1'), ('3', '2');
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 ) GROUP BY WORKORDERS.ID , WORKORDERS.QUANTITY身份證 | 名義數量 | 已輸入_數量 -: | ----------: | ----------:
SELECT COUNT(ITEMSINWORKORDERS.WORKORDER ) FROM WORKORDERS INNER JOIN ITEMSINWORKORDERS ON ITEMSINWORKORDERS.WORKORDER = WORKORDERS.ID| 計數(專案INWORKORDERS.WORKORDER)| | ----------------------------------: | | 3 |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439658.html
下一篇:sql與空值的一對一關系
