项目:
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;小提琴这里