当没有匹配记录时,如何将与另一个 table 左连接的 group_concat 列更改为空字符串而不是 null?

How can I change a group_concat column that's left joined with another table to empty string instead of null when there are no matching records?

我一直在尝试获取一个 MySQL 查询,该查询使用左连接结合 group_concat 来获取给定用户的所有个人资料照片的 Amazon S3 路径。我想要的是 photo_keys 聚合列,它是 group_concat() 函数的结果,当用户没有个人资料照片时变成空字符串而不是 null。

有很多类似的问题,其中列的值取决于某些条件(即使用 case/when 语句或 if 语句),但它们没有 [=25 这样的复杂因素=] 结合左连接。

我从什么开始(工作代码,但不是期望的行为 => photo_keys 当用户没有个人资料照片时是 null 而不是空字符串)

SELECT u.*, GROUP_CONCAT(pps.photo_key ORDER BY pps.is_primary DESC) as photo_keys
        FROM users u 
        LEFT JOIN profile_images pps ON u.id=pps.user_id
        WHERE u.id = "555555555"
        GROUP BY u.id`

我试过的(这更像是伪代码)

SELECT u.*, GROUP_CONCAT(pps.photo_key ORDER BY pps.is_primary DESC) as photo_keys, COUNT(*) as numImages
        CASE 
              WHEN numImages = 0 THEN photo_keys = ""
        END
        FROM users u 
        LEFT JOIN profile_images pps ON u.id=pps.user_id
        WHERE u.id = "5555555555"
        GROUP BY u.id`

非常感谢您的帮助。 -周杰伦

用 IFNULL 包装结果即可。

SELECT u.*, IFNULL(GROUP_CONCAT(pps.photo_key ORDER BY pps.is_primary DESC), '') as photo_keys
FROM users u 
LEFT JOIN profile_images pps ON u.id=pps.user_id
WHERE u.id = "555555555"
GROUP BY u.id`