This is a Relational Division
problem.
SELECT movie_id
FROM movies
WHERE genre_id IN (1, 2, 3) -- <<== list of genre_id
GROUP BY movie_id
HAVING COUNT(*) = 3 -- <<== count of genre_id
If genre_id
is not unique for every movie_id
, a DISTINCT
keyword is needed to filter unique ones.
SELECT movie_id
FROM movies
WHERE genre_id IN (1, 2, 3) -- <<== list of genre_id
GROUP BY movie_id
HAVING COUNT(DISTINCT genre_id) = 3 -- <<== count of genre_id