搜索

首页  >  问答  >  正文

子查询在我的查询中始终会有结果

我在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粉677684876P粉677684876443 天前518

全部回复(1)我来回复

  • P粉269847997

    P粉2698479972023-09-12 20:45:22

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

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

    db<>fiddle 在这里

    回复
    0
  • 取消回复