如何合并 3 个表中的数据

Posted

技术标签:

【中文标题】如何合并 3 个表中的数据【英文标题】:How do I combine data from 3 tables 【发布时间】:2016-05-30 10:39:09 【问题描述】:

在创建本地电影数据库时,我有 3 个具有以下结构的表:

TABLE1: movies
movie_id | movie_title

TABLE2: categories
category_id | category_title

TABLE3: categories_movies
id | movie_id | category id

一部电影可以有多个类别,我正在尝试显示每部电影及其类别,例如:

MOVIE TITLE 1 (Category 1, Category 2, Category 3)
MOVIE TITLE 2 (Category 2, Category 3)

目前我做 3 个查询,首先我选择所有电影:

select * from movies

然后

select * from categories_movies where movie_id = $movie_id

然后

select * from categories where category_id = $category_id

我已经测试了一些内部连接,但不是一个好主意,因为一部电影可以有多个类别。

任何建议都会有所帮助,谢谢。

【问题讨论】:

【参考方案1】:

我没有完全理解你要显示的格式是什么,但是如果你想显示为 1 列可以使用GROUP_CONCAT()

SELECT m.movie_title,GROUP_CONCAT(c.category_title)
FROM movies m
INNER JOIN categories_movies cm 
 ON m.movie_id = cm.movie_id
INNER JOIN categories c
 ON cm.category_id = c.category_id
GROUP BY m.movie_title

如果您只想将它​​们显示为单独的行:

SELECT m.movie_title,c.category_title
FROM movies m
INNER JOIN categories_movies cm 
 ON m.movie_id = cm.movie_id
INNER JOIN categories c
 ON cm.category_id = c.category_id

【讨论】:

这就是我想要的,你比我问的更了解我,谢谢 现在如何根据类别 id 或 category_title 显示电影?【参考方案2】:

我认为你需要使用左连接:

SELECT m.movie_title,c.category_title FROM movies m LEFT JOIN categories_movies cm ON m.movie_id = cm.movie_id LEFT JOIN categories c ON cm.category_id = c.category_id

【讨论】:

您可以在查询中使用group by语句。【参考方案3】:
SELECT movies.movie_title, GROUP_CONCAT(`category_title` SEPARATOR ',') as category 
FROM `categories_movies` 
left join categories on categories.category_id=categories_movies.category 
left join movies on movies.movie_id=categories_movies.movie_id 
GROUP BY categories_movies.movie_id

【讨论】:

【参考方案4】:

您可以使用 GROUP_CONCAT()。它可以完美运行:

 SELECT movies.movie_title, GROUP_CONCAT( categories.category_title ) 
    FROM movies 
    INNER JOIN categories_movies ON movies.movie_id = categories_movies.movie_id
    INNER JOIN categories ON categories_movies.category_id = categories.category_id
    GROUP BY movies.movie_title;

【讨论】:

那不是我的答案的副本吗? 不,那不是副本。我在mysql中尝试了上面的代码,然后写到这里。我发布后看到你的答案

以上是关于如何合并 3 个表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

(急)4个excel数据表合并成1个表

如何创建一个脚本来合并另一个表中的几个表?

sql server 语句如何将3个表合并成一个表?

Java - 合并来自不同数据源中的 2 个表的数据

如何打印加入 JDBC 的 3 个表中的列名? [复制]

在 SQLite 中同时向 4 个表中插入数据。如何?