@beduin01

Как в PostgreSQL выбрать значения значения которые есть в массиве, но нет в БД?

В БД есть таблица с
ID: 1 2 3 4 5

У меня есть массив 1 2 3 4 5 6 7. Как мне сделать запрос, который бы вернул мне цифры 6 и 7 (именно их нет в БД)?

Сама БД с ID огромная. Программно вытаскивать не вариант. Там миллионы ID-шников.
  • Вопрос задан
  • 1469 просмотров
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Всё просто: надо развернуть массив в набор строк и проверить на not exists
select i from unnest(array[1,2,3,4]) as i 
where not exists (select 1 from tablename where id = i);
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Проще всего, и дешевле по ресурсам, это сделать не на стороне базы, а программно.
Например, на питоне это займет всего одну строку
>>> set([1,2,3,4,5,6,7]) - set([1,2,3,4,5])
set([6, 7])
>>>

PS. вытащить все ID можно одним запросом select ID from mytable

PPS. Сравнение на миллионе ID - заняло 166 милисекунды
MacBook-Pro:~ leah$ python -m timeit 'set(range(1,1000022)) - set(range(1,1000000))'
10 loops, best of 3: 166 msec per loop
MacBook-Pro:~ leah$
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы