Oracle 在where子句中使用case when语句时,如何使用in子句?
如何在case when语句的else块中使用in子句,在where子句中如何使用in子句,例如:Oracle 在where子句中使用case when语句时,如何使用in子句?,oracle,plsql,plsqldeveloper,Oracle,Plsql,Plsqldeveloper,如何在case when语句的else块中使用in子句,在where子句中如何使用in子句,例如: select * from dummy_table dt where dt.some_column_1 in (case when dt.some_column_2 in (9,10) then dt.some_column_3 else (dt.some_column_4,dt.some_column_5)
select *
from dummy_table dt
where dt.some_column_1 in
(case when
dt.some_column_2 in (9,10) then dt.some_column_3
else (dt.some_column_4,dt.some_column_5)
end);
另一种方法可以是:
SELECT *
FROM dummy_table dt
WHERE ( dt.some_column_2 IN ( 9, 10 )
AND dt.some_column_1 = dt.some_column_3 )
OR ( dt.some_column_2 NOT IN ( 9, 10 )
AND dt.some_column_1 IN ( dt.some_column_4, dt.some_column_5 ) );
在secord部分中使用NOT IN更新IN子句只能使用(a)或(b)返回一组行的select语句。您的查询在括号内为它提供了一个CASE语句 我可以想出一些方法来做到这一点;还有很多
select *
from dummy_table dt
where dt.some_column_1 in
(select dt.some_column_3 from dual where dt.some_column_2 in (9,10)
union select dt.some_column_4 from dual where dt.some_column_2 not in (9,10)
union select dt.some_column_5 from dual where dt.some_column_2 not in (9,10));
select *
from dummy_table dt
where dt.some_column_1 in
(case when dt.some_column_2 in (9,10) then dt.some_column_3 else null end,
case when dt.some_column_2 not in (9,10) then dt.some_column_4 else null end,
case when dt.some_column_2 not in (9,10) then dt.some_column_5 else null end)
;
select *
from dummy_table dt
where (dt.some_column_2 in (9,10) and dt.some_column_1 = dt.some_column_3)
or (dt.some_column_2 not in (9,10) and dt.some_column_1 in (dt.some_column_4, dt.some_column_5))
;
我认为您可能需要修改上述备选方案
SELECT *
FROM dummy_table dt
WHERE ( dt.some_column_2 IN ( 9, 10 )
AND dt.some_column_1 = dt.some_column_3 )
OR ( dt.some_column_2 NOTIN ( 9, 10 ) AND dt.some_column_1 IN ( dt.some_column_4, dt.some_column_5 );
有人能回答这个问题吗?或者给出一个替代方法来完成这个问题吗?谢谢Kobi,我想这会有用的。再次感谢!:)如果列_2是9,列_1在(列_4,列_5),这将返回与原始查询逻辑不完全相同的行。OR的后半部分需要
dt。有些列不在(9,10)
中,因此需要对等。@MridulMadhukar,别忘了标记为答案,如果它符合您的需要,为什么不符合,请查看其他答案Hanks Kobi我正在尝试这一点以及其他建议,一旦我得到一个正确的输出,我肯定会标记答案。谢谢维迪亚,我在做这件事,我想这是可行的。谢谢你的回复!:)嗨,kfinity,我正在尝试Kobi和Vidya的建议,如果这不起作用,我一定会尝试你的建议。谢谢你的回复!:)