表的条件sql查询

jea*_*rey 6 php mysql sql database sql-server

我必须从SQL运行查询.也许太容易或不容易,但不幸的是我不懂SQL.所以这是我的表:

影片

id | movie_name
------------
1  | prometheus
Run Code Online (Sandbox Code Playgroud)

id | person_name
-----------------
1  | Ridley Scott
2  | Noomi Rapace
3  | Michael Fassbender
4  | Charlize Theron
5  | Damon Lindelof
Run Code Online (Sandbox Code Playgroud)

films_cast

id | film_id | person_id | type
-------------------------------
1  | 1       | 1         | director
2  | 1       | 2         | actor
3  | 1       | 3         | actor
4  | 1       | 4         | actor
5  | 1       | 5         | writer
Run Code Online (Sandbox Code Playgroud)

我怎样才能从这些表中得出这样的结论:

film_archive

id | movie_name | director     | writer         | cast
---------------------------------------------------------------------------------------
1  | prometheus | Ridley Scott | Damon Lindelof | Noomi Rapace, Michael Fassbender, Charlize Theron
Run Code Online (Sandbox Code Playgroud)

谢谢!

egg*_*yal 6

您需要加入表格,然后GROUP_CONCAT()在给定合适条件的情况下通过电影在名称列上执行聚合分组:

SELECT   f.id,
         f.movie_name,
         GROUP_CONCAT(IF(c.type='director', n.person_name, NULL)) AS director,
         GROUP_CONCAT(IF(c.type='writer',   n.person_name, NULL)) AS writer,
         GROUP_CONCAT(IF(c.type='actor',    n.person_name, NULL)) AS cast
FROM     films f LEFT JOIN films_cast c ON c.film_id   = f.id
                 LEFT JOIN names n      ON c.person_id = n.id
GROUP BY f.id
Run Code Online (Sandbox Code Playgroud)

sqlfiddle上看到它.