为啥我的查询没有按预期工作?
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
【讨论】:
以上是关于为啥我的查询没有按预期工作?的主要内容,如果未能解决你的问题,请参考以下文章