Concat中的Group_Concat不使用NULL值

时间:2012-09-29 14:43:11

标签: mysql group-concat

我有一张桌子

CREATE TABLE IF NOT EXISTS `dept` (
  `did` int(11) NOT NULL,
  `dname` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `dept` (`did`, `dname`) VALUES
(1, 'Hi'),
(2, NULL),
(3, 'Hello');

然后我有一个查询

select group_concat(concat(did,"','",dname) separator '),(') as Result from dept

正在生成1','Hi'),('3','Hello

的结果

问题:如何从上述查询中获得1','Hi'),('2','NULL'),('3','Hello

的结果

缺少具有NULL值但我需要获取所有

的行

Link for SQL Fiddle Demo of question

UPDATE:如果我有多个或所有列允许NULL,是否有某种方法可以为所有列应用COALESCE或者必须在每个列单独应用?

3 个答案:

答案 0 :(得分:9)

试试这个,使用COALESCE

.., COALESCE(dname, 'NULL'),..

使NULL字符串可见。 SQLFIDDLE DEMO

答案 1 :(得分:2)

来自MySQL aggregate function documentation

  

除非另有说明,否则组函数会忽略NULL值。

使用COALESCE()将空值替换为字符串,因为它们将被聚合函数消除。例如,如果COALESCE(dbname, 'NULL')NULL将返回字符串 dbname IS NULL。它的目的是返回你给它的参数的第一个非null ,因此可以返回一个默认值。

SELECT
  GROUP_CONCAT(CONCAT(did,"','", COALESCE(dname, 'NULL')) SEPARATOR "'),('") AS Result
FROM dept

答案 2 :(得分:0)

希望以下查询能满足您的目的

SELECT GROUP_CONCAT(
IF(dname IS NOT NULL, CONCAT(did,"','",dname), CONCAT(did,"','NULL")) 
SEPARATOR '),(') AS Result FROM dept