mysql - 所有 join 语句都返回 mysql 中的笛卡尔积

标签 mysql sql join

大家好。

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

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

select * from customer natural join ProcessH;

我尝试使用 where 子句和 join ON 子句 进行此查询。但我仍然收到笛卡尔积

最佳答案

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

例如,给定

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 |
+------+------+------+------+

关于mysql - 所有 join 语句都返回 mysql 中的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19651406/

相关文章:

php - 想要针对特定​​列值输出列值

mysql - SQL跨表索引的方法?

php - 从 53 个表返回 mysql 数据库的 p_id 和 t_id 记录?

python - 想要显示图像

php - mysql 匹配难以搜索的中文

sql - 没有重复组合的交叉连接

c# - LINQ 中的条件连接

mysql - 聚合第一行和最后一行的值

mysql - 如何在 MySQL 中插入括号和斜杠

android - 当我更正 SQL 表名称中的拼写错误时,为什么我的应用程序会崩溃?