未返回group_concat值为空的行

我有以下MySQL查询,该查询应该返回表a和b中的记录(一对多关系),以及用逗号分隔的列表,其中列出了从表c返回的任何值。但是,表c中不会总是有记录(这就是为什么我使用LEFT

OUTER JOIN将其联接到表a中的原因)。

SELECT  `a`.`id` , `a`.`name` , `b`.`id` AS  `b_id` , `b`.`name` AS  `b_name` , GROUP_CONCAT(  `c`.`l_id` ) AS  `c_ls`

FROM `a`

INNER JOIN `b` ON `a`.`b_id` = `b`.`id`

LEFT OUTER JOIN `c` ON `a`.`id` = `c`.`a_id`

GROUP BY `a`.`id`

ORDER BY `a`.`created` DESC

上面的查询应返回2时返回1条记录。记录1在表c中具有3条匹配记录,记录2在表c中具有0条匹配记录。

查询返回:

id | name | b_id | b_name | c_ls

1 | John | 2 | Bla | [BLOB - 3 B]

如果删除GROUP_CONCAT和GROUP_BY子句,则它将返回2条记录:

id | name | b_id | b_name | c_ls

1 | John | 2 | Bla | [BLOB - 3 B]

2 | Fred | 3 | Blo | [BLOB - NULL]

似乎如果c_ls为null,则GROUP_CONCAT阻止返回该行。关于我在做什么错有什么想法吗?

回答:

不幸的是,以前标记为正确的答案是错误的(如用户desaivv在评论中指出的那样)。

它必须读取 ,[不是ISNULL,isnull只需要一个参数并返回一个布尔值]!

IFNULL如果为null,则返回第二个参数:

SELECT  `a`.`id` , `a`.`name` , `b`.`id` AS  `b_id` , `b`.`name` AS  `b_name` ,   

IFNULL(GROUP_CONCAT( `c`.`l_id` ), '') AS `c_ls`

FROM `a`

INNER JOIN `b` ON `a`.`b_id` = `b`.`id`

LEFT OUTER JOIN `c` ON `a`.`id` = `c`.`a_id`

GROUP BY `a`.`id`

ORDER BY `a`.`created` DESC

我们需要的是“复杂的”联接-

http

**://www.sqlfiddle.com/#!254c6f /

3/0**

以上是 未返回group_concat值为空的行 的全部内容, 来源链接: utcz.com/qa/397672.html

回到顶部