Учитывая список идентификаторов, мне нужно определить те, которых нет в базе данных Oracle.Например, учитывая таблицу:
my_table
+----+-------+
| ID | DATA |
+----+-------+
| 1 | Foo |
+----+-------+
| 3 | Bar |
+------------+
| 5 | Etc |
+------------+
... и учитывая список [1, 2, 3, 4], мне нужен список[2, 4].
Я придумал этот синтаксис, используя предложение MINUS
:
SELECT '1' as id FROM dual
UNION
SELECT '2' as id FROM dual
UNION
SELECT '3' as id FROM dual
UNION
SELECT '4' as id FROM dual
MINUS
SELECT id FROM my_table WHERE id IN ('1','2','3','4')
Но это кажется очень неуклюжим и быстро запутается, поскольку в действительности я буду иметь дело с сотнямиИдентификаторы одновременно. Есть ли лучший синтаксис для получения списка значений, чем синтаксис UNION?
Что-то вроде:
/* Pseudo code */
SELECT id FROM VALUES ('1', '2', '3', '4')
MINUS
SELECT id FROM my_table WHERE id IN ('1','2','3','4')
Другая альтернатива - сделать это программно,Я могу запросить базу данных для существующих идентификаторов.Затем в коде я могу удалить список найденных из исходного списка, чтобы получить подсписок тех, кого нет в базе данных.Это сработало бы, но я не прав, если бы база данных работала более эффективно?
Спасибо