8

我有一张桌子

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 Fiddle 演示链接

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

4

3 回答 3

9

试试这个,使用COALESCE

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

使其NULL字符串可见。SQLFIDDLE 演示

于 2012-09-29T14:45:20.673 回答
2

MySQL 聚合函数文档

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

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

SELECT
  GROUP_CONCAT(CONCAT(did,"','", COALESCE(dname, 'NULL')) SEPARATOR "'),('") AS Result
FROM dept
于 2012-09-29T14:45:18.087 回答
0

希望以下查询能达到您的目的

SELECT GROUP_CONCAT(
IF(dname IS NOT NULL, CONCAT(did,"','",dname), CONCAT(did,"','NULL")) 
SEPARATOR '),(') AS Result FROM dept
于 2012-09-29T14:55:21.330 回答