Oracle Select 逻辑

Oracle Select Logic

我遇到了一个没有 return 任何值的查询,尽管它应该有任何值。我有

表 1 有大约 50000 个不同的 ID,以及 表 2 有大约 1000 个不同的 ID。我 运行 这个查询:

Select * From Table1 T1
Where T1.ID not in ( Select Id From Table2 T2 Where 1 = 1 )

我确实希望这个查询能给我至少 49000 行,但我没有得到一个。现在,当我 运行

Select * From Table1 T1
Where T1.ID not in ( Select Id From Table2 T2 Where T2.Id = T1.Id )

我确实得到了预期的结果(49000 行)。但是,我觉得不太合逻辑。从集合理论的角度来看,第二个 where 子句没有意义,第一个查询无论如何都应该有效...

正如 dnoeth 指出的那样:

如果我的选择中有 NULL,IN-clause 将不起作用。所以最后我会使用:

Select * From Table1 T1
Where T1.ID not in ( Select Id From Table2 T2 Where 1 = 1 and T2.Id is not null)

感谢 dnoeth。