在 SQL 开发人员的 Where 子句中使用 Case 语句
Using Case statement in Where clause in SQL developer
我正在尝试在“where 子句”中编写一个“case”语句,该子句在“then”部分有一个“in”语句。基本上,下面的代码是我想要的,但它不是 Oracle 的正确语法。有人知道正确的语法应该是什么样的吗?
create or replace PROCEDURE "Test"
(
Type in number
)
as
begin
select Id, Name, AccCode from myTable
where case Type
when 0 then AccCode in (130,131)
when 1 then AccCode in (230,231);
end;
我认为您不需要 case
声明。你可能只想
where (accCode in (130,131) and type = 1)
or (accCode in (230,231) and type = 0)
如果你真的想使用 case
语句,你可以说
where (case when accCode in (130,131) then 1
when accCode in (230,231) then 0
else null
end) = type
但这将不那么可读,优化器也不容易找到一个好的执行计划。
我正在尝试在“where 子句”中编写一个“case”语句,该子句在“then”部分有一个“in”语句。基本上,下面的代码是我想要的,但它不是 Oracle 的正确语法。有人知道正确的语法应该是什么样的吗?
create or replace PROCEDURE "Test"
(
Type in number
)
as
begin
select Id, Name, AccCode from myTable
where case Type
when 0 then AccCode in (130,131)
when 1 then AccCode in (230,231);
end;
我认为您不需要 case
声明。你可能只想
where (accCode in (130,131) and type = 1)
or (accCode in (230,231) and type = 0)
如果你真的想使用 case
语句,你可以说
where (case when accCode in (130,131) then 1
when accCode in (230,231) then 0
else null
end) = type
但这将不那么可读,优化器也不容易找到一个好的执行计划。