Как получить несколько условий в случае, когда пункт - PullRequest
0 голосов
/ 30 мая 2018

Я хочу выполнить запрос к некоторым полям таблицы, но не могу понять, как это сделать.У меня есть условие, что сначала мне нужно проверить значение col1 , если это 'W', то мне нужно проверить colA со значениями в ('1', '2'), если это не 'W', то мне нужно проверить colB со значениями в ('1', '2').Это условие проверки ('1', '2') применяется одинаково как к colA, так и к colB, только в зависимости от значения col1.

Я пытался использовать это, но, очевидно, это неверно.

SELECT * FROM tbl
WHERE CASE WHEN col1= 'W' THEN (colA IN ('1','2')) ELSE (colB IN ('1','2')) END

Так, как я могу сделать это в одном запросе без использования Unions и т. Д.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

enter image description here Sql Server-2014: используйте CASE , чтобы выбрать столбец для использования в WHERE предложении на основе условия-

SELECT * FROM tab1 
WHERE 
    (CASE WHEN col1= 'W' THEN colA ELSE colB END) in ('1', '2');

Проверено на SqlServer-2014 .прикрепленное изображение

MySql: используйте функцию IF () , чтобы выбрать столбец для использования в предложении WHERE на основе условия-

SELECT * FROM tab1 
WHERE 
    IF(col1='W', colA, colB) in ('1', '2');
0 голосов
/ 30 мая 2018

Вам не нужно CASE, просто соберите всю свою логическую логику в одном выражении.

SELECT *
FROM T
WHERE
    (Col1 = 'W' AND ColA IN ('1', '2'))
    OR
    (Col1 <> 'W' AND ColB IN ('1', '2'))
;
...