gpt4 book ai didi

mysql - 未返回 group_concat 具有空值的行

转载 作者:行者123 更新时间:2023-11-29 01:10:37 27 4
gpt4 key购买 nike

我有以下 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 为空,则 GROUP_CONCAT 会停止返回该行。关于我做错了什么有什么想法吗?

最佳答案

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

它必须读作IFNULL,[不是ISNULL,isnull只是接受一个参数并返回一个 bool 值]!

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

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

但这根本不是解决方案!我们需要的是一个“复杂的”连接——

所以请检查这个 SQL Fiddle: http://www.sqlfiddle.com/#!2/54c6f/3/0

关于mysql - 未返回 group_concat 具有空值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614316/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com