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 |
+----------+---------------+------+

电影2类型:

+----------+----------+
| 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   |
+----------+--------+------+-----------+

我不在乎选择了哪种类型,只关心这部电影作为用户要求的类型之一。

4

1 回答 1

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')
于 2015-10-07T08:03:11.500 回答