当没有匹配记录时,如何将与另一个 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`
我一直在尝试获取一个 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`