2013-10-29 51 views
0

你好,每一個身體。所有連接語句都返回mysql中的笛卡爾積

我在MySQL中遇到了一個問題。我嘗試了所有可能的聯接(自然,內部,外部)。他們都爲我返回笛卡爾產品。

我只想在兩個表之間進行自然連接。

select * from customer natural join ProcessH; 

我試過這個查詢與where clause , and join ON clause。但我仍然收到笛卡爾積

+0

如果您發佈了您嘗試的整個查詢,以便我們可以看到發生了什麼,這會有所幫助。 – Bryan

+0

這就是JOIN所做的,除非你有一個連接子句。除查詢外,還顯示錶格定義。 –

回答

1

NATURAL JOIN使用公共列作爲連接條件。

例如,給定的

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

非常感謝,這真的很有幫助 –