我在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 |
我不知道你期望什么,因为你的查询没有返回任何行。
但是要使计数工作,你需要使用
GROUP BY
。db<>fiddle 在这里