Mysql Concat中的组_Concat不使用空值

Mysql Concat中的组_Concat不使用空值,mysql,group-concat,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_con

我有一张桌子

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的列,是否有某种方法可以一次性全部应用COALESCE,或者必须在每个列上单独应用

除非另有说明,否则组函数忽略空值

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

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

试试这个,使用
COALESCE

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

使其
NULL
字符串可见。

希望下面的查询能够满足您的需要

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

您的解决方案解释得很好,可以接受。请将分隔符
)、(“
替换为
”)、(“
替换为
”)、(“
”,就像我刚才所做的那样,以及SQLFIDLEdemo@Sami上面已编辑。您也可以像在
'\'中那样转义单引号,(\''
请指导如果两列或所有列都可以有空值,那么我是否必须对每个列使用
合并
,或者有某种方法可以一次性完成此操作?不幸的是,没有,您需要在每个列上单独添加
合并
。我在concat中有另一个groupconcat示例