WHERE NOT IN returns 一个空集,但它不应该
WHERE NOT IN returns an empty set while it shouldn't
这个查询返回 90 826
行:
SELECT DISTINCT ClientID FROM devices;
现在我检查其中有多少存在于具有相同列的另一个 table 中:
SELECT DISTINCT ClientID FROM devices
WHERE ClientID IN
(
SELECT DISTINCT ClientID FROM patients
);
这返回 90 736
行,因此 90
行不应该在另一个 table 中。让我们检查一下以确保:
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 不是数据类型,您不能使用任何过滤器或子句 IN、NOT IN 等。您必须使用 IS NULL 或 [=13= 明确排除它]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 );
这个查询返回 90 826
行:
SELECT DISTINCT ClientID FROM devices;
现在我检查其中有多少存在于具有相同列的另一个 table 中:
SELECT DISTINCT ClientID FROM devices
WHERE ClientID IN
(
SELECT DISTINCT ClientID FROM patients
);
这返回 90 736
行,因此 90
行不应该在另一个 table 中。让我们检查一下以确保:
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 不是数据类型,您不能使用任何过滤器或子句 IN、NOT IN 等。您必须使用 IS NULL 或 [=13= 明确排除它]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 );