Два условия, где предложение SQL - PullRequest
0 голосов
/ 06 июля 2019

Мне нужно отфильтровать несколько строк при выполнении 2 условий, но не исключая другие строки.

Таблица:

idRow   idMaster    idList
1         10        45
2         10        46
3         10        47
4         11        10
5         11        98
6         14        56
7         16        28
8         20        55

Пример:

Когда:

  • idMaster = 10 и id List = 45 (показывать эту комбинацию только для idMaster 10)
  • idMaster = 11 и idList = 98 (показывать только эту комбинацию для idMaster 11)
  • перечисляет также все остальные строки.

Ожидаемый результат:

idRow   idMaster    idList
1         10        45
5         11        98
6         14        56
7         16        28
8         20        55

Запуск SQL Server 2014

Я пробовал комбинации CASE IF, но во всех случаяхФильтруйте только idMaster = 10,11 и idList = 45,98, исключая другие строки

Ответы [ 2 ]

4 голосов
/ 06 июля 2019

Хотя вы не упомянули имя базы данных, эта следующая логика запроса будет применима для всех баз данных -

SELECT * 
FROM your_table
WHERE idMaster NOT IN (10,11)
OR (idMaster = 10 AND idList = 45)
OR (idMaster = 11 AND idList = 98)
1 голос
/ 06 июля 2019

Вы действительно можете сделать это с помощью (вложенного) case.Надеюсь, это поможет вам лучше понять.

case idMaster
    when 10 then case idList when 45 then 1 end
    when 11 then case idList when 98 then 1 end
    else 1
end = 1

Это может быть лучше, хотя:

not (idList = 10 and idList <> 45 or idList = 11 and idList <> 98)

В целом, обычно лучше избегать повторения этого списка значений в нескольких местах.Оба из них избегают необходимости держать вещи в синхронизации, когда изменения происходят.

...