我在MySQL中有两个表:
表1 - WORKORDERS
| ID | 数量 |
|---|---|
| 1 | 2 |
| 2 | 1 |
表2 - ITEMSINWORKORDERS
| 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 | ENTERED_QTY |
|---|---|---|
| NULL | NULL | 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 | ENTERED_QTY |
|---|---|---|
| NULL | NULL | NULL |
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我不知道你期望什么,因为你的查询没有返回任何行。
但是要使计数工作,你需要使用
GROUP BY。db<>fiddle 在这里