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



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

有很多类似的问题,其中列的值依赖于某些条件(例如,使用case/when语句或if语句),但它们没有将group_concat与左连接组合在一起的复杂因素。

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

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`

最新更新