遵循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&lt; 1)两个角色名('所有者角色'和'评估所有者角色')。 请建议上述查询将如何更改。
提前致谢。
-Justin Samuel
答案 0 :(得分:12)
为什么要使用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&lt; 1),并且这些谓词实际上是实际代码中的绑定变量。< / p>
如果您真的想使用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
但是对于优化器来说,处理起来要困难得多,而对于必须维护它的开发人员来说则更不清楚。