Случай в предложении Oracle WHERE - PullRequest
5 голосов
/ 11 ноября 2011

Следующий запрос оракула соответствует и работает нормально:

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);

Теперь в моем случае я хотел бы добавить в секунду, то есть (2 <1) два rolename ('Owner Role' и 'Eval Owner Role'). Пожалуйста, предложите, как изменится приведенный выше запрос. </p>

Заранее спасибо.

- Джастин Самуэль

1 Ответ

12 голосов
/ 11 ноября 2011

Зачем использовать 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), и что они на самом деле связаныпеременные в вашем фактическом коде. </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

, но оптимизатору будет гораздо сложнее разобратьсяс и гораздо менее ясно для разработчика, который должен поддерживать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...