使用mysql中的左连接加入3个表

时间:2014-12-17 17:16:01

标签: mysql join

我总共有4张桌子。下面的数据是虚拟数据,但结构与我原来的数据库相同。

Table -- ms1    Table -- ms2          Table -- ms3

msoneid         mstwoid               msthreeid
3               11                    79
4               12                    83
5               14                    84
6               17                    85

Master table -- ms

rid                hid                   tie
11                 3                     33
11                 5                     44
12                 12                    55
12                 84                    66
13                 79                    77
13                 17                    88

我想要什么

hid           tie
3             33
4             0
5             44
6             0
11            0
12            55
14            0
17            88
79            77
83            0
84            66
85            0

我的查询是

select * from ms where rid in (11,12,13)这并没有给我其他3个表格中的其他缺席ID显然是因为它没有加入。我尝试了左连接,但我搞砸了。

非常欢迎任何帮助/提示/示例。提前谢谢。

2 个答案:

答案 0 :(得分:1)

联合查询可能在这里起作用

SELECT ms1.msoneid as hid, ms.tie FROM ms1 LEFT JOIN ms ON ms1.msoneid=ms.hid WHERE ms.rid in(11,12,13)
UNION
SELECT ms2.mstwoid as hid, ms.tie FROM ms2 LEFT JOIN ms ON ms2.mstwoid=ms.hid WHERE ms.rid in(11,12,13)
UNION
SELECT ms3.msthreeid as hid, ms.tie FROM ms3 LEFT JOIN ms ON ms3.msthreeid=ms.hid WHERE ms.rid in(11,12,13)

这里是sql fiddle

要对记录进行排序,您可以将一系列查询置于子查询之上。

SELECT * FROM (
  SELECT ms1.msoneid as hid, ms.tie FROM ms1 LEFT JOIN ms ON ms1.msoneid=ms.hid WHERE ms.rid in(11,12,13)
  UNION
  SELECT ms2.mstwoid as hid, ms.tie FROM ms2 LEFT JOIN ms ON ms2.mstwoid=ms.hid WHERE ms.rid in(11,12,13)
  UNION
  SELECT ms3.msthreeid as hid, ms.tie FROM ms3 LEFT JOIN ms ON ms3.msthreeid=ms.hid WHERE ms.rid in(11,12,13)
) as tempTbl 
ORDER BY tempTbl.hid;

答案 1 :(得分:0)

select      alias_master.* 
from        ms alias_master
left join   ms1 alias_ms1 on alias_master.rid = alias_ms1.msoneid
left join   ms2 alias_ms2 on alias_master.rid = alias_ms2.mstwoid
left join   ms3 alias_ms3 on alias_master.rid = alias_ms3.msthreeid
where       ms.rid in(11,12,13)

不确定我是否理解你的意思,但这可能有所帮助。