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')