【问题标题】:Rows with 0 value won't appear on Count in SQL querySQL 查询中的 Count 不会出现值为 0 的行
【发布时间】:2017-07-19 13:54:41
【问题描述】:

我必须得到所有的帖子,即使他们有 0 个赞,但无论如何这些帖子都没有出现,我尝试了内连接,左外连接,什么都没有

select 
    post.id as idPost, 
    post.data, 
    autor.nome as nome, 
    post.texto, 
    post.idAutor, 
    count(likes.idAutor) as numeroLikes 
from post  
join utilizador autor 
    on autor.id = post.idAutor 
left join likes 
    on post.id = likes.idPost 
left join amigos as a 
    on a.idAmigo2 = post.idAutor   
where (post.idAutor = a.idAmigo2 and a.idAmigo1 = 3) or post.idAutor = 3 
    and idPost > 0 
group by post.id~

这是帖子表,你可以看到它的 ID 为 43

这是我发布的查询的结果,您可以看到它没有显示 idPost 43 的点赞数,因为它是 0

【问题讨论】:

标签: sql


【解决方案1】:

当您在 where 子句中避免 likes 的值比较属性时,您在 likes 上的左外连接应该可以工作。比较强制所有行在结果中具有likes 的非空值。您应该将idPost > 0 修改为(idPost is null or idPost > 0) 或将此比较移到适当的连接子句中。

【讨论】:

  • 谢谢你,这有效(idPost 为 null 或 idPost > 0)
  • idPost 的值是否小于或等于 0?如果没有,您可以完全删除此比较。
  • 我不能,因为需要阻止 cmets 每次在网站上刷新,并且只在新创建的时候刷新它们
【解决方案2】:

这是一个不应该因为没有喜欢而出现帖子消失问题的查询:

SELECT 
    post.id as idPost,
COUNT(likes.idAutor) AS numeroLikes 
FROM post  
LEFT JOIN utilizador autor 
    ON autor.id = post.idAutor 
LEFT JOIN likes 
    ON post.id = likes.idPost 
LEFT JOIN amigos AS a 
    ON a.idAmigo2 = post.idAutor AND 
       ((post.idAutor = a.idAmigo2 AND a.idAmigo1 = 3) OR
      post.idAutor = 3)
WHERE idPost > 0 
GROUP BY post.id

我对您的查询进行了三项重大更改:

  • LEFT JOIN 从 post 到 utilizador;仅此一项可能已经解决了问题
  • 将所有条件从WHERE 子句移到ON 子句中,这样可以防止帖子被删除。
  • 还请注意,我只选择帖子 ID 和计数。原因是您当前的 select 子句无效,因为它包含非聚合列。

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2021-08-20
    • 2021-05-15
    • 2021-02-09
    • 1970-01-01
    • 2017-07-29
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多