MySQL 非常大的数据库左连接 1 结果
MySQL Left join 1 result for very big DataBase
我有一个很大的电影数据库,我想按年份和类型搜索电影。
我有3个table要处理:
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 年类型冒险或惊悚片的请求。
如何在 1 个优化查询中找到所有电影?
结果应该是:
+----------+--------+------+-----------+
| TITLE_ID | TITLE | YEAR | GENRE_TXT |
+----------+--------+------+-----------+
| 10001 | Matrix | 1999 | Action |
+----------+--------+------+-----------+
我不在乎选择了哪种类型,只关心这部电影作为用户要求的类型之一。
您可以尝试将 3 个表连接在一起,然后根据您对年份和电影类型的要求,使用 WHERE
子句限制查询。下面的查询将 return 只有一条记录,您指定的记录是可以接受的。
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')
我有一个很大的电影数据库,我想按年份和类型搜索电影。
我有3个table要处理:
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 年类型冒险或惊悚片的请求。
如何在 1 个优化查询中找到所有电影?
结果应该是:
+----------+--------+------+-----------+
| TITLE_ID | TITLE | YEAR | GENRE_TXT |
+----------+--------+------+-----------+
| 10001 | Matrix | 1999 | Action |
+----------+--------+------+-----------+
我不在乎选择了哪种类型,只关心这部电影作为用户要求的类型之一。
您可以尝试将 3 个表连接在一起,然后根据您对年份和电影类型的要求,使用 WHERE
子句限制查询。下面的查询将 return 只有一条记录,您指定的记录是可以接受的。
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')