查找与所有给定标签相关的电影

Mad*_*cks -1 sql postgresql relational-division

我不知道如何表达我的 SQL 问题,所以我会输入一个预期的场景。

电影ID 标签ID
1 1
1 3
1 5
2 1
2 2
2 3
3 1
3 3
3 5
3 7

我想选择至少与所有这些标签有标签关系的 movieId [1,3,5]
所以预期的输出是1,3.

小智 5

您可以将标记聚合到一个数组中并使用 contains 运算符:

select movieid
from the_table
where tagid in (1,3,5)
group by movieid
having array_agg(tagid) @> array[1,3,5]
Run Code Online (Sandbox Code Playgroud)