为啥我的查询没有按预期工作?

Posted

技术标签:

【中文标题】为啥我的查询没有按预期工作?【英文标题】: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) 是的,做到了。谢谢你。将您的评论放入答案中,以便我为您标记。谢谢。 【参考方案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 

【讨论】:

以上是关于为啥我的查询没有按预期工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的替换没有按预期工作[重复]

为啥这个 SUM() 字段没有按预期工作?

为啥我的 javascript 代码没有按预期工作

为啥我的依赖属性绑定没有按预期工作?

为啥我的 Firebase 安全规则没有按预期工作?

为啥我的 Laravel 一对一关系没有按预期工作?