I have a table
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');
Then I have a query
select group_concat(concat(did,"','",dname) separator '),(') as Result from dept
It is producing result as 1','Hi'),('3','Hello
Question: How can I get result from above query as 1','Hi'),('2','NULL'),('3','Hello
It is missing the rows which have NULL values but I need to fetch all
Link for SQL Fiddle Demo of question
UPDATE: If I have more than one or all columns allowing NULL, Is there some way to apply COALESCE once for all or have to apply individually at each Column?
The GROUP_CONCAT() function has a default length of 1024 characters, which is controlled by the global variable group_concat_max_len . If the joined values length is greater than the group_concat_max_len value, then the result string will be truncated.
The GROUP_CONCAT() function in MySQL is used to concatenate data from multiple rows into one field. This is an aggregate (GROUP BY) function which returns a String value, if the group contains at least one non-NULL value. Otherwise, it returns NULL.
try this, use COALESCE
.., COALESCE(dname, 'NULL'),..
making it NULL string visible. SQLFIDDLE DEMO
From the MySQL aggregate function documentation:
Unless otherwise stated, group functions ignore NULL values.
Use COALESCE() to replace the nulls with a string, since they would be eliminated by the aggregate function.  For example COALESCE(dbname, 'NULL') will return the string NULL if dbname IS NULL.  Its purpose is to return the first non-null of the arguments you give it, and can therefore return a default value.
SELECT
  GROUP_CONCAT(CONCAT(did,"','", COALESCE(dname, 'NULL')) SEPARATOR "'),('") AS Result
FROM dept
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With