繁体   English   中英

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

[英]How to query many to many that might not exist?

说我有这些表和值

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

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

例如,如下所示:

从......(查询)....中选择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

假设您需要单独的列,这是一个使用conditional aggregation以及cross joinouter join

select a.name, 
       max(case when am.movie_id = 1 then m.name end) movie1,
       max(case when am.movie_id = 2 then m.name end) movie2,
       max(case when am.movie_id = 3 then m.name end) movie3
from actors a cross join movies m 
     left join actors_movies am on a.id = am.actor_id and m.id = am.movie_id
group by a.id, a.name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM