我的sql查询获取“帖子”以及与之关联的所有标签:
SELECT
posts.*,
GROUP_CONCAT(tags.tag_name) tags
FROM
posts
LEFT JOIN relation ON relation.post_id = posts.id
LEFT JOIN tags ON tags.tag_id = relation.tag_id
GROUP BY posts.id
(这只是一个示例代码)。
如果不存在标签,“标签”字段将返回NULL。如何将此NULL值更改为空字符串?
我们可以使用SELECT posts.*, IF(ISNULL(GROUP_CONCAT(tags.tag_name)),'',GROUP_CONCAT(tags.tag_name)) AS tags ....
但是它GROUP_CONCATs两次。正确吗?什么是最好的方法?
答案 0 :(得分:2)
您可以使用COASLESCE
缩短if
SELECT
posts.*,
COALESCE(GROUP_CONCAT(tags.tag_name),'') AS tags
FROM
posts
LEFT JOIN relation ON relation.post_id = posts.id
LEFT JOIN tags ON tags.tag_id = relation.tag_id
GROUP BY posts.id
MySQL也支持IFNULL
这样做,但是IFNULL只允许2个参数,而不是像COALESCE
那样的无限数量。
答案 1 :(得分:0)
如何使用coalesce 它只返回一系列值中的第一个非空值
SELECT
posts.*,
GROUP_CONCAT(coalesce(tags.tag_name,'')) tags
FROM
posts
LEFT JOIN relation ON relation.post_id = posts.id
LEFT JOIN tags ON tags.tag_id = relation.tag_id
GROUP BY posts.id