gpt4 book ai didi

SQL: "NOT IN (SUBQUERY)"未按预期工作

转载 作者:行者123 更新时间:2023-12-03 19:25:40 25 4
gpt4 key购买 nike

我在 sqlite 中面临以下难题,想知道我是否缺少关于 sqlite 方言的某些内容。

基本上,当我在一张表中要求总唯一值时,我会得到一个数字。当我要求第二个表中存在的这些值的子集时,我得到的数字较小。但是当我要求对该子集的赞美时,我得到了 0。

考虑两个表,A 和 B,具有不同但重叠的小部件群体,由我们称为 Widget_ID 的唯一 ID 表示。

我得到以下行为:

SELECT COUNT(DISTINCT WIDGET_ID)
FROM A

输出:100
SELECT COUNT(DISTINCT WIDGET_ID)
FROM A
WHERE WIDGET_ID IN (SELECT WIDGET_ID FROM B)

输出:75
SELECT COUNT(DISTINCT WIDGET_ID)
FROM A
WHERE WIDGET_ID NOT IN (SELECT WIDGET_ID FROM B)

输出:0

这应该是不可能的吧?

最佳答案

not in出现问题的正常原因是NULL的存在值。 NOT IN当列表有 NULL 时总是失败因为 NULL比较不可能是真的。

您可以通过在外部过滤它们来解决此问题:

SELECT COUNT(DISTINCT WIDGET_ID)
FROM A
WHERE WIDGET_ID NOT IN (SELECT WIDGET_ID FROM B WHERE WIDGET_ID IS NOT NULL);

我更喜欢使用 NOT EXISTS ,因为它具有您期望的语义:
SELECT COUNT(DISTINCT WIDGET_ID)
FROM A
WHERE NOT EXISTS (SELECT WIDGET_ID FROM B WHERE B.WIDGET_ID = A.WIDGET_ID);

关于SQL: "NOT IN (SUBQUERY)"未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com