首页 > 解决方案 > 当数据库中没有数据时,SQL 连接返回空记录

问题描述

我正在尝试获取论坛信息以及主题和帖子的数量。我正在使用 mysql

SELECT forums.id, forums.url, forums.title, forums.description, 
       forums.icon, COUNT(topics.id) topics, COUNT(posts.id) posts 
FROM forums JOIN 
     topics 
     ON forums.id = topics.to_forum JOIN 
     posts 
     ON topics.id = posts.to_topic 

但是当没有论坛,没有主题,没有帖子时它返回 在此处输入图像描述

我尝试使用左连接、右连接、内连接(正如我在互联网上阅读的那样),但似乎没有任何效果。仅当已创建论坛而不是填充数据时,左连接才有效。如果没有论坛创建没有这个 NULL 废话,我需要它不返回任何记录。 这是表的结构,数据库中没有数据,所以我不明白为什么它返回这个

论坛 在此处输入图像描述

话题 在此处输入图像描述

帖子 在此处输入图像描述

标签: mysqlsqlgroup-byaggregate-functions

解决方案


尝试附加GROUP BY forums.id到您的查询。

您正在将聚合 ( COUNT()) 操作与普通列操作混合在同一SELECT. 如果您提供任何聚合操作而您不提供GROUP BY,您将始终从SELECT. 在标准 SQL 中,您的查询将失败。非标准中的 MySql:它试图在非聚合列中猜测你想要什么。如果没有行数,它会猜测NULL

阅读:dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

换句话说,一旦你在查询中使用,即使你没有把它放在你COUNT()的查询中,你也需要理解。GROUP BY


推荐阅读