我有一张桌子
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或者必须在每个列单独应用?
答案 0 :(得分:9)
答案 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