Oracle WHERE子句中的Case



下面的oracle查询符合并正常工作:

SELECT
    Employee.EmployeeId,
    Employee.EmployeeName,
    Employee.Description,
    Employee.IsFrozen 
FROM
    employee, employeerole, roledef
WHERE
    employee.employeeid = employeerole.employeeid 
    AND employeerole.roleid = roledef.roleid
    AND rolename IN (
                    CASE
                        WHEN (1 < 2)  THEN ('Owner Role')
                        WHEN (2 < 1)  THEN ('Eval Owner Role')
                    END);

现在在我的例子中,我想在ie (2 <1)两个角色名('Owner Role'和'Eval Owner Role')。请告知上述查询将如何更改。

提前感谢。

贾斯汀塞缪尔

为什么使用CASE ?为什么不直接

AND (   ( (1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role') )
     OR ( (2 < 1) and rolename IN ('Eval Owner Role') ) )

我假设你实际上没有硬编码的谓词来评估为TRUE (1 <2)或FALSE (2 <1)并且这些实际上是你实际代码中的绑定变量。

如果您真的想使用CASE语句,您可以编写

AND( CASE WHEN (1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role')
          THEN 1
          WHEN (2 < 1) and rolename IN ('Eval Owner Role') 
          THEN 1
          ELSE 0
       END) = 1

但是对于优化器来说处理起来要困难得多,对于必须维护它的开发人员来说也不太清楚

最新更新