如果列值相等,为什么left join返回与cartesian join相同的输出

时间:2014-06-10 13:49:16

标签: sql

如果我有2个表,则每个表只有一列:
表A:

COL1
1
1
1

表B:
COL1
1
1
1

当我说:

select * from A left join B on a.col1 = b.col1

输出相同:

select * from A,B (cartesian join).

为什么会这样?

1 个答案:

答案 0 :(得分:0)

如果您为了清楚起见添加了另一列,我认为答案变得更容易可视化:

Table A:
ID col1
1   1
2   1
3   1

Table B:
ID col1
1   1
2   1
3   1

所以你的笛卡儿产品是:

A.ID    A.Col1  B.ID    B.ID
1       1       1       1
1       1       2       1
1       1       3       1
2       1       1       1
2       1       2       1
2       1       3       1
3       1       1       1
3       1       2       1
3       1       3       1

现在添加谓词WHERE A.Col1 = B.Col1,您可以看到所有行都是如此。因此,左连接将返回与交叉连接相同的结果。