我试图想出一个逻辑来实现这个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
答案 0 :(得分: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
更新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
答案 1 :(得分: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
答案 2 :(得分:0)