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。
我遇到了一个没有 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。