WHERE NOT IN 返回一个空集,而它不应该
Posted
技术标签:
【中文标题】WHERE NOT IN 返回一个空集,而它不应该【英文标题】:WHERE NOT IN returns an empty set while it shouldn't 【发布时间】:2020-06-17 08:37:02 【问题描述】:此查询返回90 826
行:
SELECT DISTINCT ClientID FROM devices;
现在我检查在另一个具有相同列的表中存在多少:
SELECT DISTINCT ClientID FROM devices
WHERE ClientID IN
(
SELECT DISTINCT ClientID FROM patients
);
这会返回90 736
行,因此90
行不应在此其他表中。让我们检查一下以确保:
SELECT DISTINCT ClientID FROM devices
WHERE ClientID NOT IN
(
SELECT DISTINCT ClientID FROM patients
);
但这给了我一个空集,0
行。这不应该是正确的,所以我更进一步,尝试这个:
SELECT DISTINCT ClientID FROM v_keszulekek
WHERE ClientID NOT IN
(
SELECT DISTINCT ClientID FROM devices
WHERE ClientID IN
(
SELECT DISTINCT ClientID FROM patients
)
);
这确实给了我90
行,但我认为第一个版本应该也能正常工作。
显然我错过了什么。
【问题讨论】:
欢迎来到NULL的陌生世界 添加条件 WHERE CLIENTID IS NOT NULL 以及 CLIENTID NOT IN 条件 SELECT DISTINCT ClientID FROM devices WHERE ClientID IS NOT NULL AND* ClientID NOT IN(从患者中选择 DISTINCT ClientID WHERE ClientID IS NOT NULL); 显示show create table devices
和show create table patients
的输出。
确实 SELECT DISTINCT ClientID FROM patients
返回了 NULL
以及其中一个值。是否与后台发生的NULL
值进行比较?
【参考方案1】:
NULL 不是数据类型,您不能使用任何过滤器或子句 IN、NOT IN 等。您必须使用 IS NULL 或 IS NOT NULL 明确排除它> 条件。在这里,您必须执行以下操作才能获得预期的输出。
SELECT DISTINCT ClientID FROM devices WHERE ClientID IS NOT NULL AND ClientID NOT IN ( SELECT DISTINCT ClientID FROM patients WHERE ClientID IS NOT NULL );
【讨论】:
以上是关于WHERE NOT IN 返回一个空集,而它不应该的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 错误:遇到““WHERE”“WHERE”“[关闭]
如何反转 numpy.where (np.where) 函数