mysql - 如何查询可能不存在的多对多?

标签 mysql

假设我有这些表格和值

table actors
id  int  11  primary key auto_increment
name  varchar  30

table movies
id  int  11  primary key auto_increment
name  varchar  30

table actors_movies
actor_id  int  11
movie_id  int  11

我如何查询数据库以获取他们所在的所有 Actor 和电影?

例如,像这样:

从......(查询)......中选择actors.name,movies.name

输出会是这样的

actors.name movies.name movies.name movies.name
Bob         Movie A     NULL        NULL
Melissa     Movie A     Movie B     NULL
Rick        NULL        NULL        Movie C

最佳答案

逗号分隔:

SELECT actors.name, GROUP_CONCAT(movies.name)
FROM actors_movies
LEFT JOIN actors ON actors.id = actors_movies.actor_id
LEFT JOIN movies ON movies.id = actors_movies.movie_id
GROUP BY actors_movies.actor_id

输出将是这样的:

+-------------+---------------------------+
| name        | GROUP_CONCAT(movies.name) |
+-------------+---------------------------+
| Bob         | Movie A                   |
| Melissa     | Movie A,Movie B           |
| Rick        | Movie C                   |
+-------------+---------------------------+

SQLFiddle:http://sqlfiddle.com/#!9/04c0a2/1

关于mysql - 如何查询可能不存在的多对多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077578/

相关文章:

mysql - 错误 #1064 - MySQL 子查询中的 SQL 语法有错误

mysql - 通过 phpMyAdmin SQL 控制台插入日期失败

php - 不关闭 mysql 连接是否有任何可能的负面影响

MySQL查询分析器

mysql - 无需重新编译即可将 mysql 驱动程序与 ejabberd 一起使用

mysql - 创建 Hibernate 来连接表

php - 如何防止不同设备同时登录同一个账号?

php - 更新数据库类中的删除函数,以排除两组条件

java - 如何在sql中正确使用两个表之间的连接我有一个异常(exception)

php - 使用类型列定义用户关系时的高效使用