当没有匹配的记录时,如何将与另一个表连接的 group_concat 列更改为空字符串而不是 null?
Posted
技术标签:
【中文标题】当没有匹配的记录时,如何将与另一个表连接的 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? 【发布时间】:2021-12-01 13:04:45 【问题描述】:我一直在尝试获取一个 mysql 查询,该查询使用左连接和 group_concat 组合来获取给定用户的所有个人资料照片的 Amazon S3 路径。我想要的是当用户没有个人资料图片时,作为 group_concat() 函数结果的 photo_keys 聚合列变为空字符串而不是 null。
有很多类似的问题,其中列的值取决于某些条件(即使用 case/when 语句或 if 语句),但它们没有将 group_concat 与左连接结合起来的复杂因素.
我开始的内容(工作代码,但不是所需的行为 => 当用户没有个人资料图片时,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`
非常感谢您的帮助。 -杰
【问题讨论】:
【参考方案1】:用 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`
【讨论】:
以上是关于当没有匹配的记录时,如何将与另一个表连接的 group_concat 列更改为空字符串而不是 null?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过将一个表中的 id 与另一个表匹配来选择和更新一个表中的记录?