Из-за скуки я решил установить простую систему тегов для моих фильмов сегодня.У меня есть список названий фильмов и количество тегов X для каждого фильма.База данных выглядит так:
mydb=# select id, title from movies;
id | title
----+----------------------------------------
1 | first_movie
2 | second_movie
mydb=# select id, movie_id, tag_id from movie_tags;
id | movie_id | tag_id
----+----------+--------
1 | 1 | 716
2 | 1 | 787
3 | 1 | 322
4 | 2 | 716
5 | 2 | 787
6 | 2 | 323
mydb=# SELECT l.id, l.title, t.tag_id FROM movies l, movie_tags t WHERE t.movie_id = l.id AND t.tag_id IN(716, 787, 323);
id | title | tag_id
----+--------------+--------
2 | second_movie | 787
2 | second_movie | 716
2 | second_movie | 323
1 | first_movie | 716
1 | first_movie | 787
Это третий запрос, который вызывает у меня проблемы.Во-первых, он показывает дубликаты строк.Новый ряд для каждого tag_id
.Я не хочу этогоЯ бы предпочел, чтобы он показывал одну строку для каждого фильма, которая соответствует указанным тегам.
Что приводит меня ко второй проблеме.Как видите, first_movie
не помечено tag_id=323
.Тем не менее, он по-прежнему отображается в результатах.
Как я не могу показать дубликаты строк и отфильтровать результаты по фильмам, которые соответствуют всем заданным тегам?
Я планировал создать простой пользовательский интерфейс дляэто так, я надеялся на хороший «динамический» запрос, который я мог бы перетащить в список tag_ids.