>我有一个表格
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 值的行,但我需要获取所有
SQL 小提琴问题演示的链接
更新:如果我有多个或所有列允许 NULL,是否有某种方法可以一次性应用 COALESCE 或必须在每个列上单独应用?
试试这个,使用COALESCE
.., COALESCE(dname, 'NULL'),..
使其NULL
字符串可见。SQLFIDDLE 演示
来自 MySQL 聚合函数文档:
除非另有说明,否则组函数将忽略 NULL 值。
使用 COALESCE()
将 null 替换为字符串,因为它们将被聚合函数消除。 例如,如果dbname IS NULL
COALESCE(dbname, 'NULL')
将返回字符串NULL
。 其目的是返回您为其提供的参数的第一个非 null,因此可以返回默认值。
SELECT
GROUP_CONCAT(CONCAT(did,"','", COALESCE(dname, 'NULL')) SEPARATOR "'),('") AS Result
FROM dept
希望以下查询能满足您的目的
SELECT GROUP_CONCAT(
IF(dname IS NOT NULL, CONCAT(did,"','",dname), CONCAT(did,"','NULL"))
SEPARATOR '),(') AS Result FROM dept