Возвращаемое значение агрегатной функции - PullRequest
0 голосов
/ 21 ноября 2011

Мой 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 ]

2 голосов
/ 21 ноября 2011

Вы можете сократить if, используя COASLESCE

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 делает.

0 голосов
/ 21 ноября 2011

как насчет использования 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...