A B C D
1 3 3 3
3 3
结果显然是在自然加入后
A B C D
1 3 3 3
3 3 3 3
这是为什么?我认为自然连接要求在这两种情况下有类似的属性?第一个表中甚至没有C或D属性,所以它们如何加入?
例如,我们的教授说这两个连接是因为对于第一个产生的行,C是相同的,而第二个是相同的。
A B C C D
1 2 3 3 1
4 5 6 6 2
7 8 9
或者他们只是正常合并?如果在第二个表中有6 2之后的那个,那么合并将如何出现?
答案 0 :(得分:1)
交叉连接不需要任何匹配条件 - 集合A中的每一行都与集合B中的每个行匹配。
其他类型的联接(INNER
,OUTER
,LEFT
,RIGHT
)都符合条件,因此通常更受限制(即“仅加入一行” Set A中有一行Set B iff
(当且仅当),集合A的C
列中的值与集合B中C
列中的值匹配“。
但是,可以通过简单地使条件始终成为有效的CROSS
连接来进行此类连接:
SELECT *
FROM SetA
LEFT INNER JOIN SetB
ON 1 = 1 -- Voila, instant cross join
答案 1 :(得分:1)
在您的第一个示例中,没有要加入的公共字段,因此它只是返回两个表的所有可能组合。
由于您的第二个集合具有公共字段,因此结果集将被过滤为:
A B C D
1 2 3 1
4 5 6 2
答案 2 :(得分:0)
如果存在类似的列名,则会合并它们。但是,自然连接将始终为每个唯一列名创建一列。
关于加入的好信息/示例。 http://www.w3resource.com/sql/joins/