使用PostgreSQL 9.6.12。
鉴于作者有很多博客文章。
当我运行以下查询时,每个相关的帖子都会得到一行。
SELECT authors.id
FROM authors
LEFT JOIN posts ON authors.id = posts.author_id
运行以下命令时,每个作者只得到一行:
SELECT authors.*
FROM authors
LEFT JOIN posts ON authors.id = posts.author_id
但是,当我对任何一个进行计数时,我得到的行计数就更高。例如。所有帖子的数量。
为什么在使用通配符选择所有列时为什么行计数结果更高?
答案 0 :(得分:1)
该问题可能是由运行查询的方式以及IDE的设置引起的。这些查询应返回相同的行数。请运行以下查询进行检查。
select count(*) from (SELECT authors.id
FROM authors
LEFT JOIN posts ON authors.id = posts.author_id)
select count(*) from (SELECT authors.*
FROM authors
LEFT JOIN posts ON authors.id = posts.author_id)
答案 1 :(得分:0)
为什么当我使用通配符来获取笛卡尔积结果时 选择所有列?
在两个SQL查询中都没有得到笛卡尔乘积。
但是,当我对任何一个进行计数时,都会得到笛卡尔积 行数。例如。所有帖子的数量。
您没有计算所有帖子的数量。您正在检索authors
表中所有具有作者的帖子。
恐怕您会混淆笛卡尔乘积一词。笛卡尔乘积是第一个表中的行数乘以第二个表中的行数,无限制子句/条件。在简单的SQL中,它对应于以下示例:
SELECT * FROM authors, posts
问题中的两个查询返回的行完全相同,只是第一个查询仅显示id
表的列authors
,而第二个查询显示{{1}的所有列}表。
这是标准的SQL,我非常相信遵守SQL标准的每种技术都会尊重上述说法。
希望您能理解我的意思,并建议您查看问题。如果您可以显示一些具体示例,则可能会有所帮助,特别是您需要澄清以下内容: