我总共有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显然是因为它没有加入。我尝试了左连接,但我搞砸了。
非常欢迎任何帮助/提示/示例。提前谢谢。
答案 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)
不确定我是否理解你的意思,但这可能有所帮助。