如何合并 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 个表中的数据的主要内容,如果未能解决你的问题,请参考以下文章