MySQL 查询 return 逗号分隔列表中的列名称,其中值为空

MySQL query return column names in comma separated list where value is null

我想 return 为每一行、id 和逗号分隔的列名列表,其值为 null/empty。

例如table姓名applicants

id  |  name  |  age  |  location
1   |  Matt  |  null |   london
2   |  Luis  |   24  |   paris 
3   |  null  |  null |   germany
4   |  James |   28  |   null

因此查询结果如下所示:

id| missing
1 | age
3 | name,age
4 | location 

我知道如何 return 逗号分隔列表中的行而不是列名/。

SELECT * FROM `applicants` WHERE name='' OR age='' OR location='' 

我该如何解决?

以下应该适合您:

SELECT  a.id,
        CONCAT_WS(',',
                  CASE WHEN a.name IS NULL THEN 'name' END,
                  CASE WHEN a.age IS NULL THEN 'age' END,
                  CASE WHEN a.location IS NULL THEN 'location' END) AS missing
FROM   applicants AS a
WHERE  a.name IS NULL 
OR     a.age IS NULL
OR     a.location IS NULL;    

          

Example on DB Fiddle

使用 CASE 表达式检查 nulls 并使用 CONCAT_WS 连接结果:

SELECT id,
       CONCAT_WS(
         ',',
         CASE WHEN name IS NULL THEN 'name' END,
         CASE WHEN age IS NULL THEN 'age' END,
         CASE WHEN location IS NULL THEN 'location' END
       ) missing  
FROM applicants
WHERE name IS NULL OR age IS NULL OR location IS NULL 
ORDER BY id;

参见demo