gpt4 book ai didi

sql - 无法根据“不在哪里”进行过滤

转载 作者:行者123 更新时间:2023-12-03 14:59:26 24 4
gpt4 key购买 nike

我有一个带有两个表的SQLite数据库,每个表都有行id。我正在尝试基于table2中没有的内容来过滤来自table1的数据。表1具有例如:

In: SELECT id FROM table1 LIMIT 4
Out:
'0000001'
'0000002
'0000003'
'0000004'


并且table2具有:

In: SELECT id FROM table2 LIMIT 10
Out:
None
None
None
'0001098'
'0001098'
'0001098'
'0001098'
'0001098'
'0001098'
'0001098'


我想从table1返回其id列不在table2中的所有值,我尝试这样做:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2)


但这不返回任何值。如果使用 SELECT id FROM table1 EXCEPT SELECT id FROM table2,则可以正常工作。据我了解, WHERE COLUMN NOT INthe standard method来执行我要尝试执行的操作。我究竟做错了什么?

最佳答案

原因是id中的table2包含null值。
如果使用此:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2 WHERE id IS NOT null)


它会工作。
我没有在SQLite文档中找到关于这种情况的任何信息,但是对于MySQL,它来自:
https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#function_in


为了符合SQL标准,IN不仅会在以下情况下返回NULL:
左侧的表达式为NULL,但如果不匹配,则为
在列表中找到并且列表中的表达式之一为NULL



所以这是SQL标准,这意味着在您的情况下,该语句为:

IN (SELECT id FROM table2)


返回 NULL然后

NOT IN (SELECT id FROM table2)


还返回 NULL
因此,您的病情不会评估为 TRUE,并且您不会获得任何结果。

关于sql - 无法根据“不在哪里”进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55502356/

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