Знать, какие элементы не существуют внутри предложения IN в SQL

Я получил такой запрос

Select * from tablename where field1 in (a,b,c,d);

Я хочу знать, если есть способ, где, если элемент не найден, БД возвращают все поля этого элемента с нулем

пример

+-------+-------+-------+
|field_1|field_2|field_3|
+-------+-------+-------+
|a      |1      |4      |
+-------+-------+-------+
|b      |null   |null   |
+-------+-------+-------+
|c      |4      |5      |
+-------+-------+-------+

1 ответ

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

CREATE TABLE #temp (field1 VARCHAR(10))

INSERT INTO #temp VALUES ('a')
INSERT INTO #temp VALUES ('b')
INSERT INTO #temp VALUES ('c')
INSERT INTO #temp VALUES ('d')

SELECT t1.field1, t2.field2, t2.fields
FROM #temp t1
LEFT JOIN tablename t2 ON t1.field1 = t2.field1

Другим способом будет СОЮЗ:

Select * from tablename where field1 in (a,b,c,d)
UNION 
SELECT 'a', null, null, null WHERE 'a' NOT IN (select field1 FROM tablename)
UNION 
SELECT 'b', null, null, null WHERE 'b' NOT IN (select field1 FROM tablename)
UNION 
SELECT 'c', null, null, null WHERE 'c' NOT IN (select field1 FROM tablename)
UNION 
SELECT 'd', null, null, null WHERE 'd' NOT IN (select field1 FROM tablename)

(Я предполагаю, что значения 'a', 'b', 'c', 'd' нет в существующей таблице - иначе просто LEFT JOIN эта таблица, как в примере с временной таблицей.)

Другие вопросы по тегам