在我的工作中,我们遇到了SQLite查询中的一个错误,它返回了奇怪的结果。查询看起来有点像这样:
SELECT * FROM TableA
WHERE TableA.ID NOT IN
(
SELECT TableA.ID -- Table A
FROM TableB -- Table B
);
此查询似乎返回的是TableA中不在TableB中的所有结果。
你可以试试这个:
CREATE TABLE `TableA` (
`ID` INTEGER,
PRIMARY KEY(ID)
);
CREATE TABLE `TableB` (
`ID` INTEGER,
PRIMARY KEY(ID)
);
INSERT INTO TableA (ID)
values (1),(2),(3);
INSERT INTO TableB (ID)
values (1),(2);
在这种情况下,上面的查询将返回3(因为3不在表B中)。
我想知道的是这里实际发生了什么。这个查询是如何有效的,为什么它在A中返回结果,而不是在B?
中我个人希望这个查询不会返回任何结果。我在Microsoft SQL Server中尝试了相同的设置和查询,其中调用上述查询将不会返回任何结果。
由于
编辑:
如评论中所述,在子查询中,预期和正确的查询应该是SELECT ID FROM TableB
,这就是找到奇怪行为的原因。