如果我自然地加入这两个表,为什么结果是什么? (基本上,请解释。)

时间:2012-10-19 02:02:14

标签: mysql sql

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之后的那个,那么合并将如何出现?

3 个答案:

答案 0 :(得分:1)

交叉连接不需要任何匹配条件 - 集合A中的每一行都与集合B中的每个行匹配。

其他类型的联接(INNEROUTERLEFTRIGHT)都符合条件,因此通常更受限制(即“仅加入一行” 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/