简体   繁体   English

如何在 output 行中使用涉及在 MySQL 中使用多个 JOINS 和 GROUP_CONCAT 的查询的空白字段?

[英]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,但没有运气。

  1. First, you need to use left join to link your query to actresses as it is possible to have zero of them.首先,您需要使用左连接将您的查询链接到女演员,因为它们可能为零。
  2. Second, you need to use IFNULL or COALESCE as you said in order to manage NULL values.其次,您需要按照您所说的使用 IFNULL 或 COALESCE 来管理 NULL 值。

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

SEE DEMO HERE在此处查看演示

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

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