所有join语句都在mysql中返回Cartesian产品

时间:2013-10-29 06:41:42

标签: mysql sql join

大家好。

我在MySQL中遇到了一个问题。我尝试了各种可能的连接(自然,内部,外部)。所有这些都为我回归了笛卡尔积。

我只想在两个表之间进行自然连接。

select * from customer natural join ProcessH;

我使用where clause , and join ON clause尝试了此查询。但我仍然收到笛卡尔产品

1 个答案:

答案 0 :(得分:1)

NATURAL JOIN使用公共列作为连接条件。

,例如

T1(X,Y,Z)   T2(Y,Z,W)

将加入T1.Y = T2.Y和T1.Z = T2.Z。

如果您没有常用的列名,则可以获得交叉产品。

编辑:

示例:

create table T1(x int, y int, z int);
create table t2(y int, z int, w int);
insert into T1 values (1,2,3), (10,20,30);
insert into T2 values (2,3,4), (20,30,40);
select * from T1 natural join T2;

给你

+------+------+------+------+
| y    | z    | x    | w    |
+------+------+------+------+
|    2 |    3 |    1 |    4 |
|   20 |   30 |   10 |   40 |
+------+------+------+------+

但是

create table T3(x int, y int);
create table T4(z int, w int);
insert into T3 values (1,2), (10,20);
insert into T4 values (3,4), (30,40);
select * from T3 natural join T4; 

给你:

+------+------+------+------+
| x    | y    | z    | w    |
+------+------+------+------+
|    1 |    2 |    3 |    4 |
|   10 |   20 |    3 |    4 |
|    1 |    2 |   30 |   40 |
|   10 |   20 |   30 |   40 |
+------+------+------+------+