聚合函数的返回值

时间:2011-11-21 14:13:32

标签: mysql sql

我的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两次。正确吗?什么是最好的方法?

2 个答案:

答案 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