查询数组中的完全匹配



项目:

id | name  | ref
---|-------|----
1  |item 1 | x2
2  |item 2 | x3

选项:

id | option_id | item_id 
---|-----------|--------
1  | 1         | 1
2  | 2         | 1
2  | 3         | 1
2  | 1         | 2
2  | 3         | 2

给定项ref='x2'和选项数组[1,2,3],我应该得到一行具有确切选项的项1。具有选项[1,2]的给定项1应返回null。

我试过了,但没有得到结果:

SELECT items.*,(
SELECT  options.id
FROM    options, items
WHERE   options.option_id IN (1,2,3) AND options.item_id = items.id 
GROUP BY options.id, items.id
HAVING COUNT(options.*) = 2)
FROM items WHERE items.ref = 'x2';

什么是最好的选择?

这里有一种方法可以制作一组选项并进行比较:

select * from items i 
join ( select item_id , ARRAY_AGG(option_id order by option_id) optionids
from options 
group by item_id
) o  on i.id = o.item_id
where ref = 'x2'
and optionids <@ array[1,3,2]

db<gt;小提琴这里

最新更新