[英]How can I output rows with a blank field involving a query using multiple JOINS and GROUP_CONCAT in MySQL?
I am having trouble with either my JOINS or the GROUP_CONCAT function in a MySQL query I am trying to write.我在尝试编写的 MySQL 查询中的 JOINS 或 GROUP_CONCAT function 遇到问题。 I have a database with the following tables and enough sample rows to help someone answer my question:
我有一个数据库,其中包含以下表格和足够的示例行来帮助某人回答我的问题:
actor table -演员表 -
actor_id [PK] | actor_name
--------------+--------------
ryan-reynolds | Ryan Reynolds
actress table -女演员表——
actress_id [PK] | actress_name
-------------------+-------------------
blake-lively | Blake Lively
morena-baccarin | Morena Baccarin
brianna-hildebrand | Brianna Hildebrand
studio table -工作室桌 -
studio_id [PK] | studio_name
----------------------+----------------------
twentieth-century-fox | Twentieth Century Fox
warner-bros | Warner Bros.
audiovisual-aval-sgr | Audiovisual Aval SGR
movie table -电影桌——
movie_id [PK] | movie_title | studio_id [FK] | movie_date
--------------+---------------+-----------------------+---------------
1 | Deadpool | twentieth-century-fox | 2016-02-12
2 | Green Lantern | warner-bros | 2011-06-17
3 | Buried | audiovisual-aval-sgr | 2010-10-15
movie_actors table - movie_actors 表 -
actor_id [FK] | movie_id [FK]
--------------+--------------
ryan-reynolds | 1
ryan-reynolds | 2
ryan-reynolds | 3
movie_actresses table - movie_actresses 表 -
actress_id [FK] | movie_id [FK]
-------------------+--------------
blake-lively | 2
morena-baccarin | 1
brianna-hildebrand | 1
The MySQL query I am trying to write is to return a list of movies for a specific actor, "Ryan Reynolds", along with the movie's release date, studio and then a concatenation of the actresses that also starred in the movie (if there are any).我正在尝试编写的 MySQL 查询是返回特定演员“Ryan Reynolds”的电影列表,以及电影的发行日期、工作室,然后是在电影中出演的女演员的串联(如果有任何)。 I have written the following query:
我写了以下查询:
SELECT
movie_date,
movie_title,
studio_name,
GROUP_CONCAT(actress_name SEPARATOR ", ") AS all_actress_names
FROM
movie
NATURAL JOIN studio NATURAL JOIN movie_actors NATURAL JOIN movie_actresses NATURAL JOIN actress WHERE actor_id = "ryan-reynolds"
GROUP BY
movie_id
ORDER BY
movie_date
DESC
But it doesn't return the movie "Buried" because I don't have any actresses linked to that movie.但它不会返回电影“Buried”,因为我没有任何与该电影相关的女演员。 The ouput is as follows:
输出如下:
movie_date | movie_title | studio_name | all_actress_names
-----------+---------------+-----------------------+------------------------------------
2016-02-12 | Deadpool | Twentieth Century Fox | Morena Baccarin, Brianna Hildebrand
2011-06-17 | Green Lantern | Warner Bros. | Blake Lively
How can I edit my query to return all the movies?如何编辑查询以返回所有电影? Leaving the "all_actress_names" field blank for "Buried", like so:
将“Buried”的“all_actress_names”字段留空,如下所示:
movie_date | movie_title | studio_name | all_actress_names
-----------+---------------+-----------------------+------------------------------------
2016-02-12 | Deadpool | Twentieth Century Fox | Morena Baccarin, Brianna Hildebrand
2011-06-17 | Green Lantern | Warner Bros. | Blake Lively
2010-10-15 | Buried | Audiovisual Aval SGR |
I think I may be using the wrong JOINS.我想我可能使用了错误的 JOINS。 But it could also be because GROUP_CONCAT is returning a NULL.
但这也可能是因为 GROUP_CONCAT 正在返回 NULL。 I have tried using ISNULL, IFNULL and COALESCE on the "actress_name" field, with no luck though.
我尝试在“actress_name”字段上使用 ISNULL、IFNULL 和 COALESCE,但没有运气。
See the following query:请参阅以下查询:
SELECT
movie_date,
movie_title,
studio_name,
GROUP_CONCAT(IFNULL(actress_name,'') ORDER BY actress_name SEPARATOR ", ") AS all_actress_names
FROM
movie M
NATURAL JOIN studio S
NATURAL JOIN movie_actors MAM
LEFT JOIN movie_actresses MAW ON MAW.movie_id = M.movie_id
LEFT JOIN actress AW ON MAW.actress_id = AW.actress_id
WHERE
actor_id = "ryan-reynolds"
GROUP BY
M.movie_id
ORDER BY
movie_date
DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.