2012-07-10 123 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