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フィドルデモへのリンク

更新: NULLを許可する列が複数またはすべてある場合、COALESCEをすべてに1回適用する方法、または各列に個別に適用する必要がある方法はありますか?

4

3 に答える 3

9

これを試して、使用COALESCE

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

文字列を表示しNULLます。SQLFIDDLEデモ

于 2012-09-29T14:45:20.673 に答える
2

MySQL集計関数のドキュメントから:

特に明記されていない限り、グループ関数はNULL値を無視します。

COALESCE()nullは集計関数によって削除されるため、nullを文字列に置き換えるために使用します。たとえば、。の場合は文字列COALESCE(dbname, 'NULL')を返します。その目的は、指定した引数の最初のnull以外を返すことであるため、デフォルト値を返すことができます。 NULLdbname 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 に答える