mysql - 当数据库中没有数据时,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 废话,我需要它不返回任何记录。 这是表的结构,数据库中没有数据,所以我不明白为什么它返回这个
解决方案
尝试附加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
推荐阅读
- python - 在测试集中用中位数填充 Nan 值
- reporting-services - 带有详细数据的 SSRS 报告
- vb.net - 在 Ms-access Db vb.net 中找到最大 ID
- python - Python aes ctr (cryptography.hazmat aes) 相似的输入给出相似的输出
- javascript - 将用户重定向到另一个页面后开始文件下载(NodeJS / Express)
- sql - 有没有办法从 Laravel Forge 进行自动数据库备份?
- xml - 如何使用 XSLT 从 XML 中获取属性?
- selenium - 如何使用 XPath 获取特定项目的值?
- ssl - terraform kubernetes 提供程序 - 未正确创建 tls 机密
- ios - 原始类型的枚举不能有带参数的案例