Предложение SQL - IN без совпадения - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь создать запрос, в котором я могу выбрать из таблицы все продукты с определенным идентификатором, но я также хотел бы выяснить, какие продукты не были найдены в предложении IN.

Таблица продуктов

ID | Name
---|---------
1  | ProductA
2  | ProductB
4  | ProductD
5  | ProductE
6  | ProductF
7  | ProductG
select *
from products
where id in (2,3,7);

Как видите, идентификатор продукта 3 не существует в таблице. Мой запрос будет возвращать только строки 2 и 7. Я хотел бы, чтобы пустая / нулевая строка возвращалась, если значение в предложении IN ничего не возвращало.

Желаемые результаты:

ID | Name
---|---------
2  | ProductB
3  | null
7  | ProductG

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать left join:

select i.id, p.name
from (select 2 as id union all select 3 union all select 7
     ) i left join
     products p
     on p.id = i.id
1 голос
/ 17 октября 2019

IN в этом случае бесполезен. Используйте CTE с идентификаторами, которые вы хотите найти, и оставьте соединение с таблицей:

with cte(id) as (select * from (values (2),(3),(7)))
select c.id, p.name 
from cte c left join products p
on p.id = c.id    

См. demo . Результаты:

| id  | Name     |
| --- | -------- |
| 2   | ProductB |
| 3   |          |
| 7   | ProductG |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...