Проверка NULL в запросе WHERE - PullRequest
       1

Проверка NULL в запросе WHERE

0 голосов
/ 12 октября 2018

Мне нужно поставить эту проверку в моем заявлении оракула

  AND   country.X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY')

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

Ответы [ 6 ]

0 голосов
/ 12 октября 2018

Просто добавьте условие с существующим условием и заключите его в скобки

AND (case.xsa_region is not null and country.X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY'))

0 голосов
/ 12 октября 2018

Просто используйте nvl с нерелевантным аргументом в виде:

AND nvl(country.X_GSA_REGION,'xYzDt') NOT IN ('Russia','Dummy', 'Other', 'DUMMY')

. Этот случай не исключает нулевые значения для столбца country.X_GSA_REGION.

Демонстрация SQL Fiddle

0 голосов
/ 12 октября 2018

Ваш предикат имеет значение

(.xsa_region is not null )  - - > (X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY') )

Словом, если область XSA не равна нулю, область GSA не должна быть в списке.

правило преобразования для A --> B равно NOT (A) OR B

то есть ваш предикат (список упрощен)

not (XSA_REGION is NOT NULL) OR GSA_REGION not in ('DUMMY');

, который можно переписать в

(XSA_REGION равен NULL) ИЛИGSA_REGION not in ('DUMMY');

Пример

select * from tab;        

        ID XSA_REGION GSA_REGION
---------- ---------- ----------
         1            DUMMY      
         2            X          
         3 X          DUMMY      
         4 X          X        

select * from tab
where GSA_REGION not in ('DUMMY');

       ID XSA_REGION GSA_REGION
---------- ---------- ----------
         2            X          
         4 X          X  


--  A --> B  means NOT (A)  OR B
select * from tab
where 
not (XSA_REGION is NOT NULL) OR GSA_REGION not in ('DUMMY');

        ID XSA_REGION GSA_REGION
---------- ---------- ----------
         1            DUMMY      
         2            X          
         4 X          X 
0 голосов
/ 12 октября 2018

Я думаю, это то, что вы имеете в виду:

and (
  case.xsa_region is null or
  (
    case.xsa_region is not null
    and country.X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY')
  )
)

, но я хочу привести случай, когда case.xsa_region не равен нулю только тогда, когда это утверждение должно [b] быть оценено.

Условие case.xsa_region is not null ANDed для оператора country.X_GSA_REGION NOT IN (...), которое вы хотите добавить, будет гарантировать, что этот оператор будет оценен, если xsa_region не равен нулю.

Но xsa_region может быть нулевым.И ваше утверждение имеет в начале ключевое слово and, означающее, что ваше утверждение будет добавлено к существующему предложению , где .Чтобы все ваше предложение , где могло быть оценено как истинное, когда xsa_region равно нулю, мы добавляем xsa_region is null ORed к двум условиям, которые мы ANDed ранее.

0 голосов
/ 12 октября 2018

Я не знаю, по какому сценарию вы хотите это сделать, поскольку вы не упомянули об этом.Но вы можете сделать:

WHERE (xsa_region IS NOT NULL AND 
       country.X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY')
      )
0 голосов
/ 12 октября 2018

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

where  (country.X_GSA_REGION NOT IN ('Russia','Dummy', 'Other', 'DUMMY')   
and country.xsa_region is not null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...