2012-07-10 44 views
1

我有三個表。每個人都有三列。它看起來像這樣:mySql多列連接與重合數據

 
table 1     table 2     table 3 
--------------------  --------------------  -------------------- 
col1 col2 colA  col1 col2 colB  col1 col2 colC 
1  A  data  3  C  data  5  E  data 
2  B  data  2  B  data  6  F  data 
3  C  data  1  A  data  3  C  data 
4  D  data  4  D  data  2  B  data 
5  E  data  6  F  data  1  A  data 
6  F  data  5  E  data  3  C  data 

我的問題是,如果它是使用連接到輸出這樣的事情在所有可能的:

 
output table     
----------------------------------------- 
col1 col2 colA  colB  colC 
1  A  data  data  data 
2  B  data  data  data 
3  C  data  data  data 
4  D  data  data  data 
5  E  data  data  data 
6  F  data  data  data 

注意col1和col2的總是在不同列中的值相同但順序不同。

我甚至不知道這是否可能,但理想情況下,查詢將連接三個表,並將col1和col2上的信息與各個表相關聯,並重新排序兩個連接表並輸出單個表/數組。

讓我知道這是否真的很愚蠢或複雜......我一直試圖圍繞這一點,但由mySql知識是非常有限的。

+0

爲什麼表3中沒有4/d? – maxhud 2012-07-10 19:36:02

回答

1
SELECT * 
FROM t1 
LEFT JOIN t2 USING (col1, col2) 
LEFT JOIN t3 USING (col1, col2) 
+0

好東西!這是最接近我想要實現的。 @Palladium的建議有很多重複,ctrahey沒有顯示任何內容。 我正在做更多的數據測試,以檢查一切是否正常工作,但現在看起來這正是我所需要的! 謝謝所有 – 2012-07-11 16:02:32

+0

我從來沒有聽說過使用mysql的原因!看起來像關聯具有相同列的不同表格是非常有用的。 [鏈接](http://code.openark.org/blog/mysql/mysql-joins-on-vs-using-vs-theta-style) – 2012-07-11 19:56:13

0

當然這是可能的。只要您在表格中擁有相同的數據,您可以將它們鏈接起來並將數據一起顯示。

例如:

SELECT table1.*, colB, colC FROM table1, table2, table3 
WHERE table1.col1 = table2.col1 AND table2.col1 = table3.col1 
ORDER BY table1.col1 ASC; 

將輸出你的問題表。在示例中,我沒有使用col2作爲條件,因爲它不需要將數據鏈接在一起。

+0

好東西!這實際上是最接近我試圖得到的。 Palladium的建議有很多重複,ctrahey沒有顯示所有內容。 謝謝 – 2012-07-11 16:01:17

0

這是用於簡單雙連接的SQL。如果您需要澄清我誤解的任何內容,請調整。

SELECT 
    table1.col1, 
    table1.col2, 
    colA, 
    colB, 
    colC 
FROM table1 
JOIN table2 
    ON table1.col1 = table1.col1 
    AND table1.col2 = table2.col2 
JOIN table3 
    ON table1.col1 = table3.col1 
    AND table1.col2 = table3.col2