【问题标题】:All join statements are returning Cartesian product in mysql所有连接语句都在 mysql 中返回笛卡尔积
【发布时间】:2013-11-08 04:56:18
【问题描述】:

大家好。

我在 MySQL 中遇到了一个问题。我尝试了所有可能的连接(自然、内部、外部)等等。他们都在为我返回笛卡尔积。

我只想要两个表之间的自然连接。

select * from customer natural join ProcessH;

我用where clause , and join ON clause 尝试了这个查询。但我仍然收到笛卡尔积

【问题讨论】:

  • 如果您发布了您尝试过的整个查询,您会有所帮助,以便我们了解发生了什么。
  • 这就是 JOIN 的作用,除非你有一个 join 子句。除了查询之外,还显示表定义。

标签: mysql sql join


【解决方案1】:

自然连接使用公共列作为连接条件。

例如,给定

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

将加入 T1.Y = T2.Y AND 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 |
+------+------+------+------+

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 2021-10-12
    • 2012-02-23
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多