Заявление Sql для взаимоисключающих событий - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь запустить оператор SQL на iSeries, который будет выводить ретулы на основе параметра типа, который я передаю.

Просто скажите, что mytable имеет поле с именем field1.field1 содержит значения Y, N и NULL.

Тип «Y» должен возвращать только значения «Y».Тип 'N' должен возвращать не 'Y' значения.(т. е. Null, N и любой другой мусор в поле)

Я пробовал это ...

        select *
          from mytable
          where field1 in case when :type = 'Y' then 'Y'
               else (select field1 from mytable where field1 <> 'Y') end

Однако, это не работает.

1 Ответ

1 голос
/ 21 сентября 2011

Я считаю, что логика, которую вы ищете, такова:

SELECT *
FROM myTable
WHERE (:type = 'Y' AND field1 IS NOT null AND field1 = 'Y')
   OR (:type <> 'Y' AND (field1 IS null OR field1 <> 'Y'))

(имейте в виду, что логика короткого замыкания не гарантирована с помощью SQL ...)

Помните, что null ни с чем не сравнимо, и лучше всего подчеркнуть тот факт, что вы на самом деле хотите (во втором случае).

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