Как я могу найти вхождения и пропущенные значения массива в одном запросе? - PullRequest
1 голос
/ 01 марта 2020

С учетом массива чисел c строк, например, arr = ['202', '303', '1', ...] и следующей таблицы:

MyTable
code VARCHAR(255)

Возможно найти в одном запросе:

  1. Все значения в arr, которого нет в MyTable.code?
  2. Все значения MyTable.code, которого нет в arr?

Есть какой-то способ добиться этого?

Я использую PostgreSQL.

1 Ответ

2 голосов
/ 01 марта 2020

Вы можете удалить массив и использовать join s или что-то подобное

Для первого условия:

select el
from unnest(ar) el 
where not exists (select 1 from t where t.code = el);

Аналогичные логики c можно использовать для второго, но вы можете захотеть select distinct:

select t.code
from t 
where not exists (select 1 from unnest(ar) el  where t.code = el);

Если вы хотите оба в одном запросе, вы можете использовать union all или full join:

select el, t.code
from unnest(ar) el full join
     t 
     on t.code = el
where t.code is null or el is null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...