【问题标题】:Why is my query not working like expected?为什么我的查询没有按预期工作?
【发布时间】:2016-11-14 16:46:33
【问题描述】:

我有一个查询,我试图获取它们不在另一个表中的特定值,但是当我运行查询时,我没有得到任何结果。这就是我所看到的。请让我知道出了什么问题。

原始查询:返回 399 行

        USE TFW_DEV

    SELECT
       unitid, unitnumber
     FROM
       Units
     WHERE 
        createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
    ORDER BY
        unitnumber

查询表共享数据的位置:返回 50 行

USE TFW_DEV

SELECT
   unitid, unitnumber
 FROM
   Units
 WHERE 
    createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
    AND unitid  IN
    (
        SELECT
            unitid
        FROM
            meteraudit      
    )
ORDER BY
    unitnumber

使用 NOT IN 的最终查询:返回 0 行

USE TFW_DEV

SELECT
   unitid, unitnumber
 FROM
   Units
 WHERE 
    createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
    AND unitid NOT IN
    (
        SELECT
            unitid
        FROM
            meteraudit      
    )
ORDER BY
    unitnumber

我希望最终查询正确返回 349 行?如果不是我做错了什么?谢谢,

【问题讨论】:

  • meteraudit 中的unitid 是否有任何NULL 值?
  • 有几行是空的。
  • 那就是问题所在。对于这两个查询,您需要使用IN /* or NOT IN */ (SELECT unitid FROM meteraudit WHERE unitid IS NOT NULL)
  • 是的,做到了。谢谢你。将您的评论放入答案中,以便我为您标记。谢谢。

标签: sql-server tsql notin


【解决方案1】:

Sub-Query返回NULL值时,NOT IN失败

使用NOT EXISTS

SELECT unitid, 
       unitnumber 
FROM   units U 
WHERE  createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59' 
       AND NOT EXISTS (SELECT 1 
                       FROM   meteraudit M 
                       WHERE  U.unitid = M.unitid) 
ORDER  BY unitnumber 

【讨论】:

    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2019-08-28
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多