温馨提示:本文翻译自stackoverflow.com,查看原文请点击:mysql - SQL join returns null records when there are no data in database
aggregate-functions group-by mysql sql

mysql - 当数据库中没有数据时,SQL连接返回空记录

发布于 2020-04-04 00:03:13

我正在尝试获取论坛信息以及主题和帖子数。我正在使用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 

但是,如果没有论坛,没有主题,也不会返回任何帖子 在此处输入图片说明

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

论坛 在此处输入图片说明

话题 在此处输入图片说明

帖子 在此处输入图片说明

查看更多

提问者
DevByGames
被浏览
26
44.5k 2020-01-31 20:37

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

您正在将aggregate(COUNT())操作与普通列操作混合在一起SELECT如果您进行任何汇总操作而您不进行任何操作,则GROUP BY始终会从处返回正好一行SELECT在标准SQL中,查询将失败。非标准的MySql:它想在非汇总列中猜测您想要的内容。如果没有要计算的行,则为猜测NULL

请阅读以下内容:dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

换句话说,即使您未COUNT()在查询中使用查询,也需要立即对其进行理解GROUP BY