У меня есть список идентификаторов, и я хотел бы получить список идентификаторов, которые не отображаются ни в одной строке моей таблицы.
Например, это моя таблица:
item_id | text
--------|-------
1 | one
2 | two
3 | three
И, например, если мой список идентификаторов 1, 2, 4 и 5, я хотел бы вернуть 4 и 5, потому что оба они не находятся в таблице. есть идеи как это сделать?
Потому что у меня есть некоторые идентификаторы, и мне нужно найти те, которых нет в таблице. Идентификаторы являются UUID, поэтому они генерируются вне SQL. Некоторые (и связанные с ними данные) уже сохранены в этой таблице, а некоторые нет.
Ах хорошо. Самый простой подход, вероятно, просто INSERT OR IGNORE
все из них (конечно, при условии, что UUID хранится в уникальном столбце). Таким образом, будут добавлены те, которых еще нет в таблице, а те, которые есть, будут неактивными.
Если у вас есть список внешних идентификаторов, который не хранится в базе данных, вы можете создать подобный запрос, объединив все внешние идентификаторы в список значений, разделенных запятыми, заключенных в квадратные скобки (чтобы поместить идентификаторы в отдельные строки):
with
cte as (
-- construct list of outside values in brackets here
select [] as Outside_Id from (values (1),(2),(4),(5))
)
select Outside_Id as UnusedId
from cte
where Outside_Id not in (select Item_id from ItemTable)
Это работает для не слишком большого количества внешних идентификаторов.
Если у вас есть внешние идентификаторы в таблице OutsideIdTable
, вы можете использовать
select Outside_Id as UnusedId
from OutsideIdTable
where Outside_Id not in (select Item_id from ItemTable)
Зачем тебе это?