select 的行为和 =,IN, 的行为存在于 oracle 中

Behavior of select and behaviour of =,IN, Exists in oracle

当我 运行 以下两个查询时,我得到相同的结果:

select * from bambam where name in(select name from bambam1 where bambam1.name=bambam.name);

select * from bambam where name =(select name from bambam1 where bambam1.name=bambam.name);

我的第一个问题是 IN= 之间有什么区别?

我的第二个问题是,当我 运行 设置子查询 (select name from bambam1 where bambam1.name=bambam.name) 的 select 部分时,出现以下错误,为什么?

Error at line 1

ORA-00904: "BAMBAM"."NAME": invalid identifier

我有 2 个表格如下:

BAMBAM:

NAME DATE1    
---- ---------
gha  07-MAY-16

gh   12-DEC-12

abc       

BAMBAM1

NAME
----
gh  
abc 

IN= 之间没有区别,只要您 100% 确定子查询总是 return 最多一行。 IN 是这样工作的: where x in (1, 2, 3) 意味着 - 根据定义! - 与 where x = 1 or x = 2 or x = 3 相同。特别是,如果括号中的列表只有一个元素:where x in (1)where x = 1.

的含义完全相同

此外,当子查询 return 没有结果时,IN 查询和 = 查询 return 都没有行。这是您对 IN 查询应该期望的结果。对于 = 查询,Oracle 应该抱怨(抛出错误),但 Oracle(公司)决定在这种情况下也只是 return 没有结果,而不是抛出错误。然而,如果子查询 returns 多于一个结果,那么 IN 查询将 return 与 each[=40] 子查询的结果一样多的行=] name 的值,而 = 查询将显示一条错误消息。

因此,对于 bambam 中的名称 gha,子查询 return 没有结果,因此两个 "larger" 查询 return 没有行 gha。对于 gh,子查询 return 只有一个结果,gh - 因此 "larger" 或 "outer" 查询两个 return gh。与 abc.

相同

关于你的另一个问题,表格真的和你展示的一样吗?一个是 bambam,另一个是 bambam2,但在查询中您指的是 bambam1?如果是这样,你有你的答案。如果不是,请注意细节。祝你好运!

对于你问题的第二部分:如果你运行只是这个查询:

select name from bambam1 where bambam1.name=bambam.name

bambam 是未知标识符,因为它不会作为行源的名称或别名出现在查询中。

当您 运行 完整查询时,它会从主 FROM 子句解析 bambam。当你自己拉出子查询时,那个上下文就消失了。