【问题标题】:MySQL Left join 1 result for very big DataBaseMySQL Left join 1 结果用于非常大的数据库
【发布时间】:2015-10-07 07:57:49
【问题描述】:

我有一个庞大的电影数据库,我想按年份和类型搜索电影。

我有 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 年的请求,类型为冒险或惊悚片。

如何在 1 个优化查询中找到所有电影?

结果应该是:

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

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

【问题讨论】:

    标签: mysql database left-join movies


    【解决方案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')
    

    【讨论】:

    • 我会删除 LIMIT...OP 想要所有电影...只是他的样本数据从显示的内容中只返回 1。 (但赞成准确查询,否则)
    • 谢谢!工作很棒。我只需添加“GROUP BY m.TITLE_ID”即可获得 1 个电影结果。
    • @TheWiz,查看帮助 -> 浏览网站礼仪并将答案标记为已解决(答案旁边的复选标记)。让其他人知道什么是有效的,其他人不必在不再需要时继续提供解决方案:)
    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2018-02-28
    • 2015-07-08
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多