SQL Like с несколькими операторами - PullRequest
0 голосов
/ 27 августа 2018

Итак, у меня есть следующий запрос, который не дает правильных результатов, и я не знаю почему:

Пример данных:

LIST1 | LIST2
APRIL | NOLA
NOLA  | BEBB
NOLA  | APROLS
APRA  | BLIN

Запрос:

SELECT LIST1, 
       LIST2, 
       CASE WHEN (([LIST1] LIKE '%APR%' 
                   OR [LIST1] LIKE '%NOLA%') 
             AND ([LIST2] NOT LIKE '%APR%' 
                   AND [LIST2] NOT LIKE '%NOLA%')) 
            THEN 1 
            ELSE 0 
       END AS RESULTS

Возвращает 1 для обоих рядов.Это должно вернуть 0 для первого ряда.Поэтому я ожидал бы следующий вывод

LIST1 | LIST2 | RESULTS
APRIL | NOLA  | 0
NOLA  | BEBB  | 1
NOLA  | APROLS| 0
APRA  | BLIN  | 1

В чем здесь моя ошибка?Вывод должен быть 0 для этих двух случаев, как я четко указал в операторе «И».

1 Ответ

0 голосов
/ 27 августа 2018
SELECT LIST1, 
       LIST2, 
       CASE 
          WHEN (([LIST1] LIKE '%APR%' 
                 OR [LIST1] LIKE '%NOLA%') 
           OR ([LIST2] NOT LIKE '%APR%' 
                AND [LIST2] NOT LIKE '%NOLA%')) 
          THEN 1 
          ELSE 0 
       END AS RESULTS

LIST1   LIST2   RESULTS
APRIL   NOLA    1
NOLA    BEBB    1
NOLA    APROLS  1
APRA    BLIN    1

это дает вам оба случая 1, потому что [LIST1] LIKE '%APR%' OR [LIST1] LIKE '%NOLA%' эта строка верна для 'APRIL' значения 1-й строки списка1 и снова это верно для 'NOLA' для 2-й строки, и когда любая часть будет иметь значение true или условие, тогда полное условие будет истинным. В результате вы получили оба случая 1

но если вы поставите условие and, то результат будет таким, как вы ожидаете

SELECT LIST1, 
       LIST2, 
       CASE WHEN (
         (
           [LIST1] LIKE '%APR%' 
                   OR [LIST1] LIKE '%NOLA%') 
             AND 
         (
                  [LIST2] NOT LIKE '%APR%' 
                   AND [LIST2] NOT LIKE '%NOLA%')

          ) 
            THEN 1 
            ELSE 0 
       END AS RESULTS from t

http://sqlfiddle.com/#!18/9f8c5/1

LIST1   LIST2   RESULTS
APRIL   NOLA    0
NOLA    BEBB    1
NOLA    APROLS  0
APRA    BLIN    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...