【问题标题】:SQL subqueries return records, but the main query as a whole returns zero rowsSQL子查询返回记录,但主查询整体返回零行
【发布时间】:2019-02-18 17:30:24
【问题描述】:

此查询作为一个整体获取零行。我试过分别运行每个子查询,每个都运行良好。

主表ITEMS 包含库存中的所有项目。表ISSUED 包含已从主存储区发出的item IDs

我在这个主查询中运行了两个子查询。一个获取库存中在给定日期进入库存但尚未发出的所有项目的计数,另一个获取当天进入库存的所有项目的计数,但是当天发出。

我需要获取按项目名称分组的这两个项目计数的总和。

SELECT ITEMS.ITEM AS ITEM,
   ( IFNULL(Arr1.TAG_COUNT, 0)
     + IFNULL(Arr2.TAG_COUNT, 0) ) AS TAG_COUNT 
 FROM   ((SELECT ITEMS.ITEM      AS ITEM,
           Count(ITEMS.ID) AS TAG_COUNT
    FROM   ITEMS
    WHERE  ITEMS.DT_ARRIVAL = '2019-01-01'
           AND ITEMS.ID NOT IN (SELECT ISSUED.ID
                                FROM   ISSUED)
    GROUP  BY ITEMS.ITEM) AS Arr1
    LEFT JOIN (SELECT ITEMS.ITEM      AS ITEM,
                      Count(ITEMS.ID) AS TAG_COUNT
               FROM   ITEMS
                      LEFT JOIN ISSUED
                             ON ISSUED.ID = ITEMS.ID
               WHERE  ITEMS.ID IN (SELECT ISSUED.ID
                                   FROM   ISSUED)
                      AND ISSUED.DATE = '2019-01-01'
               GROUP  BY ITEMS.ITEM) AS Arr2
           ON Arr2.ITEM = Arr1.ITEM
    LEFT JOIN ITEMS
           ON ITEMS.ITEM = Arr1.ITEM)
GROUP  BY ITEMS.ITEM  

【问题讨论】:

  • 每个ITEMS实例有不同的表别名,让代码更清晰。

标签: sql sqlite


【解决方案1】:

如果您的要求是正确的,您似乎使这比您需要的复杂得多。从你说你需要什么

1) 2019 年 1 月 1 日到达但尚未发货的物品。

2) 2019 年 1 月 1 日到达并在同一天发货的物品。

您当前的 SQL 存在许多问题,但您可以使用简单的 OR 子句更简单地获得结果:

SELECT A.ITEM, COUNT(*)
FROM ITEMS A
WHERE A.DT_ARRIVAL = '2019-01-01'
AND ( NOT EXISTS (SELECT 1 FROM ISSUED B WHERE A.ID = B.ID)
     OR (EXISTS (SELECT 1 FROM ISSUED C WHERE A.ID = C.ID
         AND C.ISSUED_DT = A.DT_ARRIVAL)
  )
GROUP BY A.ITEM

如果我遗漏了什么,请告诉我,但这似乎涵盖了列出的要求。

您当前查询的一个问题是您正在从满足您的第一个要求的行到满足您的第二个要求的行进行左连接。他们永远不应该加入,因此您永远不会获得第二个要求的行/值。总的来说,我认为您使用太多不必要的子查询和连接让自己感到困惑,然后当您多次引用同一个表时不使用唯一别名,这让您更加困惑。

【讨论】:

  • 谢谢!它就像一个魅力。我觉得自己很愚蠢,我无法想到这一点。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2016-05-15
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多