Знать, какие элементы не существуют внутри предложения 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
эта таблица, как в примере с временной таблицей.)