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示例