Oracle Select逻辑

时间:2019-07-17 15:50:39

标签: sql oracle select notin

我陷入了一个查询,尽管应该返回任何值。我有

具有大约50000个不同ID的表1,以及 Table2具有大约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子句没有意义,而第一个查询应该仍然可以工作...

1 个答案:

答案 0 :(得分:0)

正如dnoeth所指出的:

如果选择的内容为NULL,则IN子句将不起作用。所以最后我将使用:

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

谢谢。