sql - 为什么在连接后返回比预期更多的行?
问题描述
我有 2 张桌子:
table 1 : count(*) ->7k rows
table 2 : count(*) ->19k rows
当我这样做时:
select count(*)
from table1
inner join table2;
它返回 1366127997 行。这怎么可能?
解决方案
您当前的查询实际上是在进行交叉连接:
SELECT COUNT(*)
FROM table1
INNER JOIN table2; -- behaves like CROSS JOIN sans an explicit ON clause
ON
您很可能期望来自包含主键和辅助键的子句的内部连接的结果,例如:
SELECT COUNT(*)
FROM table1 t1
INNER JOIN table2 t2
ON t2.fk = t1.pk;
这可能会返回比您当前使用交叉连接看到的计数更少的记录。
推荐阅读
- php - PDO 锁定表行 INNODB
- php - 未成功将产品从 android 应用程序添加到 woocommerce
- xml - 使用 Python 的 ElementTree 和 ACM 的分类索引进行 RDF 和 XML 迭代
- r - 在几天内创建具有相同时间戳的虚拟时间序列(R)
- android - Android RecyclerView 缺少项目的大差距
- mapbox - 如何隐藏 Mapbox 访问令牌
- c# - 使用c#从保存在本地系统中的eml文件中提取附件
- r - R Shiny textInput 像表格格式
- docker - 使用 Dockerfile 将多个用户添加到图像
- django - 允许 Django Admin 更改是否需要某个字段