#mysql
#mysql
Вопрос:
Запрос возвращает значение null, если строк нет, вместо возврата 0. Я пробовал использовать COALESCE
и IFNULL
, но, похоже, ничего не работает.
WITH USER AS (SELECT id, Json_object('name', u.NAME, 'photo_url', u.photo_url) AS USER FROM users u WHERE id = :userId), cmt AS (SELECT post_id, COALESCE(Count(pc.id), 0) AS totalComments FROM post_comments pc GROUP BY post_id) SELECT p.id, p.text, p.created_at, p.likes, u.USER, cmt.totalcomments FROM posts p INNER JOIN USER u ON u.id = p.user_id LEFT JOIN cmt ON cmt.post_id = p.id ORDER BY p.id DESC
Комментарии:
1. Функция COUNT() никогда не возвращает значение NULL, поэтому вам даже не нужно ОБЪЕДИНЯТЬСЯ(). То, что вы видите как NULL в результатах, является значением
totalComments
из строкиcmt
, которая не соответствует условиям в предложении ON ЛЕВОГО соединения. Используйте COALESCE() дляcmt.totalcomments
2. Используйте
COALESCE(cmt.totalcomments, 0)
и удалитеCOALESCE
с вашегоCOUNT
3. Я сейчас попробовал, он не возвращает 0, но имя таблицы становится таким
COALESCE(cmt.totalComments, 0): 0
вместоtotalComments: 0
4. если вам действительно нужно конкретное имя столбца (зачем?), используйте
COALESCE(cmt.totalcomments, 0) as totalcomments
5. Вау, это было решение, ура, приятель