0

我试图想一个逻辑来实现这个mysql查询,但我想不出任何东西或在互联网上找到任何东西。我的任务是Join两个或多个表并返回它的匹配字段。但是,如果有两个表上匹配行的三个表也必须显示。假设我有这 3 张桌子,

Table1-
num |info
----------
1   |aaaaa  
2   |bbbb
3   |ccc
4   |dddd
4   |dddd
5   |eeee

Table2-
num |info
----------
2   |bbbb
3   |ccc
4   |dddd
5   |eeee

Table3-
num |info
----------
1   |aaaaa
2   |bbbb
6   |ffff
7   |gggg

我想加入这三个表并得到如下结果,

Result-
num |info   num |info   num |info
----------- ----------- ----------
1   |aaaaa  NULL|NULL   1   |aaaaa
2   |bbbb   2   |bbbb   2   |bbbb
3   |ccc    3   |ccc    NULL|NULL
4   |dddd   4   |dddd   NULL|NULL
4   |dddd   4   |dddd   NULL|NULL
5   |eeee   5   |eeee   NULL|NULL

我有这个查询,它只显示在所有三个表上。

   SELECT a . * , b. * , c . *
   FROM tbl_1 a
   JOIN tbl_2 b ON a.num = b.num
   JOIN tbl_3 c ON a.num = c.num
   ORDER BY a.num, b.num

但我想要的是即使值出现在两个表中也能显示。

非常感谢你。如果在此之前解决了这个问题,这将有助于为我指明正确的方向:) 再次感谢

表结构更新

Table1-
num |info
----------
1   |aaaaa  
2   |bbbb
3   |ccc
3   |ccc
4   |dddd

Table2-
num |info
----------
1   |aaaaa
3   |ccc
4   |dddd
5   |eeee
6   |ffff

Table3-
num |info
----------
1   |aaaaa
6   |ffff
2   |bbbb

在这样的情况下,记录6 |ffff不会显示,

期望的输出更新

我想要得到的结果是,

Result-
num |info   num |info   num |info
----------- ----------- ----------
1   |aaaaa  1   |aaaaa  1   |aaaaa
2   |bbbb   NULL|NULL   2   |bbbb
3   |ccc    3   |ccc    NULL|NULL
3   |ccc    3   |ccc    NULL|NULL
4   |dddd   4   |dddd   NULL|NULL
NULL|NULL   6   |ffff   6   |ffff
4

3 回答 3

4
SELECT  a.*
FROM    table1 a
        INNER JOIN
        (
            SELECT num, info FROM table2
            UNION
            SELECT num, info FROM table3
        ) b ON a.num = b.NUM

SQLFiddle 演示

更新 1

SELECT  a.num numA, a.info infoA,
        b.num numB, b.info infoB,
        c.num numC, c.info infoC
FROM    table1 a
        LEFT JOIN table2 b
           ON a.num = b.num
        LEFT JOIN table3 c
           ON a.num = c.num
ORDER BY a.num

SQLFiddle 演示

于 2012-10-24T05:46:06.557 回答
2
SELECT a . * , b. * , c . *
  FROM tbl_1 a
  LEFT JOIN tbl_2 b ON a.num = b.num
  LEFT JOIN tbl_3 c ON a.num = c.num
  ORDER BY a.num, b.num
于 2012-10-24T05:44:35.893 回答
0

这个问题由@Andreas Wederbrand 解决,

3个表的完全连接

实施 afull join是我的查询的解决方案。

希望它对遇到这个问题的人有所帮助:)

于 2012-10-25T10:56:20.837 回答