MySQL Left join 1 результат для очень большой базы данных

У меня есть большая база фильмов, и я хочу искать фильмы по годам и жанрам.

У меня есть 3 таблицы, чтобы иметь дело с:

1. movies (Key TITLE_ID)
2. movie2genre (TITLE_ID + GENRE_ID)
3. genre (Key GENRE_ID)

фильмы:

+----------+---------------+------+
| TITLE_ID |     TITLE     | YEAR |
+----------+---------------+------+
|  10001   | Matrix        | 1999 |
|  10002   | Walk on Water | 2004 |
+----------+---------------+------+

movie2genre:

+----------+----------+
| TITLE_ID | GENRE_ID |
+----------+----------+
|  10001   |    1     |
|  10001   |    2     |
|  10002   |    2     |
|  10002   |    4     |
|  10001   |    3     |
+----------+----------+

жанр:

+----------+-----------+
| GENRE_ID | GENRE_TXT |
+----------+-----------+
|    1     | Action    |
|    2     | Adventure |
|    3     | Thriller  |
|    4     | Fantasy   |
+----------+-----------+

Пользователь отправляет запрос на 1999 год, жанр Adventure или Thriller.

Как найти все фильмы в 1 оптимизированном запросе?

Результат должен быть:

+----------+--------+------+-----------+
| TITLE_ID | TITLE  | YEAR | GENRE_TXT |
+----------+--------+------+-----------+
|  10001   | Matrix | 1999 |  Action   |
+----------+--------+------+-----------+

Мне все равно, какой жанр будет выбран, только то, что этот фильм как один из жанров, которые просят пользователи.

1 ответ

Решение

Вы можете попробовать объединить 3 таблицы, а затем ограничить запрос WHERE пункт, используя ваши требования для года и жанра фильма. Приведенный ниже запрос вернет только одну запись, которую вы указали как приемлемую.

SELECT m.TITLE_ID, m.TITLE, m.YEAR, g.GENRE_TXT
FROM movies m
INNER JOIN movie2genre mg ON m.TITLE_ID = mg.TITLE_ID
INNER JOIN genre g ON mg.GENRE_ID = g.GENRE_ID
WHERE m.YEAR = 1999 AND g.GENRE_TXT IN ('Adventure', 'Thriller')
Другие вопросы по тегам