首页 > 解决方案 > 为什么在连接后返回比预期更多的行?

问题描述

我有 2 张桌子:

table 1 : count(*) ->7k rows

table 2 : count(*) ->19k rows

当我这样做时:

select count(*)
from table1
inner join table2;

它返回 1366127997 行。这怎么可能?

标签: sqlimpala

解决方案


您当前的查询实际上是在进行交叉连接:

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;

这可能会返回比您当前使用交叉连接看到的计数更少的记录。


推荐阅读