以下是一些示例代码:
CREATE TABLE test (
first_name VARCHAR(255),
last_name VARCHAR(255)
);
INSERT INTO test (first_name) VALUES ('first_1');
INSERT INTO test (last_name) VALUES ('last_1');
SELECT GROUP_CONCAT(first_name, last_name) FROM test;
SELECT GROUP_CONCAT(first_name), GROUP_CONCAT(last_name) FROM test;
第一个选择返回null,而MySQL documentation表示如果没有非NULL值则返回null。 Here是一个演示。
答案 0 :(得分:1)
预期此结果。考虑第一个查询:
SELECT GROUP_CONCAT(first_name, last_name) FROM test;
由于每条记录的名字或姓氏都有NULL
,因此您要连接NULL
值,然后汇总NULL
,同时还会产生NULL
。要更好地理解此行为,请运行查询SELECT CONCAT('Hello', NULL) FROM dual
并观察输出为NULL
。
但是,在第二个查询中:
SELECT GROUP_CONCAT(first_name), GROUP_CONCAT(last_name) FROM test;
您是在各个列上连接的组。在这种情况下,NULL
值将被忽略,并且您将保留非NULL
名字和姓氏的个人值。
从图中可以看出,我们可以得出以下结论:
first_name | last_name | CONCAT (first_name, last_name)
first_1 | NULL | NULL
NULL | last_1 | NULL
--------------------------------
first_1 | last_1 | NULL <-- GROUP_CONCAT of columns
您可以看到记录中的GROUP_CONCAT
行为与其他聚合函数类似,忽略NULL
个值。但是,在列之后,GROUP_CONCAT
将首先进行连接,即使一个值为NULL
,也会生成NULL
。
答案 1 :(得分:0)
使用having
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`
having `a`.`id` IS NOT NULL
GROUP BY `a`.`id`
ORDER BY `a`.`created` DESC