子查询在我的查询中始终会有结果
P粉677684876
P粉677684876 2023-09-11 22:06:01
0
1
517

我在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

P粉677684876
P粉677684876

全部回复(1)
P粉269847997

我不知道你期望什么,因为你的查询没有返回任何行。

但是要使计数工作,你需要使用GROUP BY

db<>fiddle 在这里

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板