Я думаю, что вы передаете входные данные в виде массива json. Вы можете использовать json_to_recordset
, чтобы преобразовать его в строки, а затем выполнить соединение с таблицей access
и сравнить счет с HAVING
, чтобы получить пересечение.
SQL Fiddle
Настройка схемы PostgreSQL 9.6 :
CREATE TABLE access
(ID int, access int, value varchar(2))
;
INSERT INTO access
(ID, access, value)
VALUES
(1, 18, 'ab'),
(1, 32, 'bc'),
(1, 48, 'cd'),
(2, 18, 'ef'),
(3, 18, 'ab'),
(3, 32, 'bc')
;
Запрос 1 :
SELECT ID
FROM access a
INNER JOIN (
SELECT *, COUNT(*) OVER () as ct
FROM json_to_recordset('[{"access":18,"value":"ab"},{"access":32, "value":"bc"}
,{"access":48,"value":"cd"}
]'
)
AS j("access" INT, "value" TEXT)
) j ON (
j.access = a.access
AND j.value = a.value
) GROUP BY ID HAVING COUNT(*) = MAX(ct)
Результаты
| id |
|----|
| 1 |