我可以使用带有子查询的`=`符号运算符而不是`IN`

时间:2018-03-12 07:33:05

标签: oracle

我只是想知道是否使用带有子查询的=符号运算符代替IN 这是正确的方法吗?并符合oracle标准?

示例

select column_name from my_table_1 where id = (select max(id) from my_table_2);

3 个答案:

答案 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);