我只是想知道是否使用带有子查询的=
符号运算符代替IN
这是正确的方法吗?并符合oracle标准?
示例
select column_name from my_table_1 where id = (select max(id) from my_table_2);
答案 0 :(得分:0)
差异与返回的行数有关。如果您只有一行从嵌套的sql返回,您可能更喜欢=
或in
运算符。但是,如果从嵌套查询返回多行,请使用in
运算符。
因此,在您的SQL示例中,您可能更喜欢使用任何运算符。因为,max
函数只返回一行。
答案 1 :(得分:0)
当您从子查询中获取最大值以与id进行比较时,两者(=和IN)都可以正常工作。但是如果您尝试获取多行,则必须使用IN关键字。
答案 2 :(得分:0)
如果在子查询中有1个结果,则可以使用=
符号,除非数据类型错误,例如,使用相同数据类型的虚拟VARCHAR2(1)
进行检查
select * from dual where 'X' = (select max(dual.dummy) from dual);
类似于使用in
(也是同样的解释)
select * from dual where 'X' in (select max(dual.dummy) from dual);
但是使用不同/错误的数据类型进行检查将导致异常ORA-01722 Invalid number
select * from dual where 1 =(select max(dual.dummy) from dual);