2011-10-06 195 views
-1
SELECT table1.PrimaryKey(Some ID), table2.nameOfSomething 
FROM table1 
INNER JOIN table2 

這裏有用的是部分我不明白:如何「使用」和「ON」的關鍵字在這段代碼

USING(id) 

這個ID是table1的外鍵和表2的主鍵

我真的不明白..

table1.ID值:

25行:

row 1-5 = 1 , row 6-10 = 2 , row 11-15 = 3 , row 16-20 = 4 , row 21-25 = 5 

table2.ID值:

5行:

row 1 = 1 , row 2 = 2 , row 3 = 3 , row 4 = 4 , row 5 = 5 

我測試它,我得到不同的結果,沒有它,是怎麼來?

注:表1中包含的利益,表2包含了這些利益

隨時要求以獲取更多信息

+0

需要更多解釋:'USING(id)'和'ON table1.id = table2.id'的結果究竟有什麼區別? – soulmerge

+0

這是一回事。 – MatBailie

回答

0
| Table1: | Table2:   | 
| id  | id | table1_id | 
| 1  | 1  3   | 
| 2  | 2  2   | 
| 3  | 3  1   | 


如果用USING(id)加入以上兩個表一起,它將匹配行,其中在Table1id值是相同的Table2id ...

SELECT * FROM table1 JOIN table2 USING(id) 

| id | id table1_id | 
| 1 | 1  3  | 
| 2 | 2  2  | 
| 3 | 3  1  | 


但是,在Table2中的id可能與idTable1中無關。如果是這樣的話,你可以使用ON要具體你如何匹配記錄在一起......

SELECT * FROM table1 JOIN table2 ON table1.id = table2.table1_id 

| id | id table1_id | 
| 1 | 3  1  | 
| 2 | 2  2  | 
| 3 | 1  3  | 


如果你指定什麼都沒有,你在一個表中的每個記錄相匹配,對每記錄在其他表...

SELECT * FROM table1 CROSS JOIN table2 

| id | id table1_id | 
| 1 | 1  3  | 
| 1 | 2  2  | 
| 1 | 3  1  | 
| 2 | 1  3  | 
| 2 | 2  2  | 
| 2 | 3  1  | 
| 3 | 1  3  | 
| 3 | 2  2  | 
| 3 | 3  1  | 
1

使用指定應通過連接在兩個表中列出的列進行聯接類別。也就是說

SELECT  t1.col1, 
      t1.col2, 
      t2.col1 
FROM  table1 AS t1 
INNER JOIN table2 AS t2 
USING  (col1) 

相同

SELECT  t1.col1, 
      t1.col2, 
      t2.col1 
FROM  table1 AS t1 
INNER JOIN table2 AS t2 
ON   t1.col1 = t2.col1 

僅供參考,請參閱the MySql homepage

1

USING是相等連接和依賴的屬性名剩餘表之間相同的相同數據元素。

ON更靈活:因爲它要求您在兩個表中明確指定屬性名稱,相同數據元素的屬性名稱可以相同,或者它們在表格之間可以不同。另外,它是一個theta-join,意味着連接類型可以是任何條件,包括相等。由於這種靈活性,ON更爲詳細。