簡體   English   中英

Concat中的Group_Concat不使用NULL值

[英]Group_Concat in Concat not working with NULL values

我有一張桌子

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 DEMO

MySQL聚合函數文檔

除非另有說明,否則組函數會忽略NULL值。

使用COALESCE()將空值替換為字符串,因為它們將被聚合函數消除。 例如COALESCE(dbname, 'NULL')將返回字符串 NULL ,如果dbname IS 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM