2015-09-14 59 views
1

我的理解是,内部连接应该采用具有相同键的A和B的交集,所以交集中结果的数量永远不会超过A或B.但是,我运行了一个猪脚本,它应该默认情况下执行一个内部连接,这表明交叉点比A或B有更多的结果。可能导致这种情况的原因是什么?为什么A和B的内部连接会产生比A或B更多的结果?

OLD_count = FOREACH (GROUP OLD ALL) GENERATE COUNT(OLD); 
NEW_count = FOREACH (GROUP NEW ALL) GENERATE COUNT(NEW); 

G = JOIN NEW BY (X, Y), OLD by (X, Y); 
JOIN_count = FOREACH (GROUP G ALL) GENERATE COUNT(G); 

DUMP OLD_count; 
DUMP NEW_count; 
DUMP JOIN_count; 

-- Results (approximate): 
-- (70000000) 
-- (80000000) 
-- (85000000) wtf? 
+2

如果你对你在两个表中加入的值有不同的看法,你可以得到更多的行。 –

+0

从两个表之间的内部联接返回的行数可以在0到(table1上的行数* table2上的行数) –

+0

@ConradFrix谢谢,就是这样。 –

回答

2

随着加入,你会得到一个结果,每组合,因此,如果一个以上的加入给定对象而成,它将被多次返回。

考虑2位老师和3位学生,每位老师教授每个学生。有5(2 + 3)个实体,但是如果你是通过他们的关系加入这两个组,那么将会有结果。

相关问题