Фильтровать данные из SQL-запроса - PullRequest
0 голосов
/ 06 ноября 2019

В приведенной ниже таблице мне нужно исключить CategoryID=1002 и Gender='KIDS' запись из таблицы и вернуть другие записи.

+------+--------+
|  ID  | Gender |
+------+--------+
| 1001 | MENS   |
| 1002 | MENS   |
| 1001 | WOMENS |
| 1002 | WOMENS |
| 1001 | KIDS   |
| 1002 | KIDS   |
+------+--------+

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

+------+--------+
|  ID  | Gender |
+------+--------+
| 1001 | MENS   |
| 1002 | MENS   |
| 1001 | WOMENS |
| 1002 | WOMENS |
| 1001 | KIDS   |
+------+--------+

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Вы можете использовать выражение CASE как

SELECT *
FROM
(
  VALUES
  (1001,    'MENS'),
  (1002,    'MENS'),
  (1001,    'WOMENS'),
  (1002,    'WOMENS'),
  (1001,    'KIDS'),
  (1002,    'KIDS')
) T(Id, Gender)
WHERE CASE WHEN ID = 1002 AND Gender = 'KIDS' THEN 1 ELSE 0 END = 0;

Онлайн-демонстрация

1 голос
/ 06 ноября 2019

Я не рекомендую использовать выражения case в предложении where, поскольку это может повлиять на оптимизатор.

Это легко выразить в виде логической логики:

where not (CategoryID = 1002 and Gender = 'KIDS')

или:

where CategoryID <> 1002 or Gender <> 'KIDS'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...