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;
使用 CASE
表达式检查 null
s 并使用 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。
我想 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;
使用 CASE
表达式检查 null
s 并使用 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。