我想使用IN语句过滤一些数据,如:
select * from mytable t where t.field in ( 'some statement' )
我应该写什么而不是'some statement'
来从mytable
如果t.field
为number
类型且t.field
为varchar2
类型
答案 0 :(得分:1)
select * from mytable t where t.field in ( select field from mytable )
您必须注意字段中的 null 值会导致问题。给定的SQL将具有与
相同的结果select * from mytable t
只要字段不为空。
如果字段为数字或 varchar2 ,则无关紧要。
答案 1 :(得分:1)
您在
中看起来想要一个语句select * from mytable t where t.field in ( 'some statement' )
但是从你的评论我认为这不是必要的。所以它可以是偶数:
select * from mytable t where t.field in (t.field)
Oracle的优化程序将看到where t.field = t.field
并在where t.field is not null
内部重新编写此查询以防field
可以为空,或者在field
中完全删除where子句不可为空。
所以这个速度和它一样快。
答案 2 :(得分:-1)
select * from myTable t where t.field1 = 'AAA' and t.field2 in (select max(field2) from myTable where field1= 'AAA');
它可能有帮助。