@KarlGTA

Как написать SQL запрос для фильтрации фильмов по жанрам и странам?

Все привет!
У меня есть БД с фильмами, в которой есть следующие таблицы:
  • countries (code, name)
  • genres (id, name)
  • movies (id, title, description)
  • movie_genres (movie_id, genre_id)
  • movie_countries (movie_id, country_code)


Задача:
Необходимо выбрать все фильмы, жанры и страны которых находятся в определенном списке.
Например, выбрать фильмы, у которых страны "Россия" И "Япония" + жанры "Боевик" И "Комедия" И "Ужасы".

Мой вариант решения:
SELECT m.*
FROM movies m
WHERE m.id IN (
  SELECT groupped_movies.id
  FROM (
         SELECT m.id,
                array_agg(mc.country_code) country_codes,
                array_agg(mg.genre_id)     genre_ids
         FROM movies m
                LEFT JOIN movie_countries mc on m.id = mc.movie_id
                LEFT JOIN movie_genres mg on m.id = mg.movie_id
         GROUP BY m.id
       ) groupped_movies
   WHERE groupped_movies.country_codes @> ARRAY ['ru', 'ja'] AND groupped_movies.genre_ids @> ARRAY [1, 2, 3]);
  • Вопрос задан
  • 964 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы