2014-02-12 43 views
0

我的表是这样的:MySQL的关联表到多个表

 map   table1   table2   table3 
| aID | bID | | bid | val |  | bid | val | | bid | val | 
------------- -------------  ------------- ------------- 
| 1 | 1 | | 1 | 20 |  | 3 | 10 | | 4 | 15 | 
------------- -------------  ------------- ------------- 
| 1 | 2 | | 1 | 22 |  | 3 | 23 | | 4 | 25 | 
------------- -------------  ------------- ------------- 
| 1 | 3 | | 2 | 15 |  | 3 | 14 | | 4 | 11 | 
------------- -------------  ------------- ------------- 
| 2 | 3 | | 2 | 23 |  | 5 | 32 | | 2 | 3 | 
------------- 
| 2 | 4 | 
------------- 

试过这样:

SELECT val, bid 
    FROM map m 
    RIGHT JOIN table1 t 
    ON m.bID =t.bid 
    RIGHT JOIN table2 tt 
    ON m.bID =tt.bid 
    RIGHT JOIN table3 ttt 
    ON m.bID =ttt.bid 
    WHERE aID = 1 

出价只是在TableX的一个

是有一个简单的如何检索aID 1的所有值?

+0

使用左连接,而不是右连接 – PravinS

回答

1

尝试此查询

SELECT val, bid 
FROM map m 
LEFT JOIN table1 t 
    ON m.bID =t.bid 
LEFT JOIN table2 tt 
    ON m.bID =tt.bid 
LEFT JOIN table3 ttt 
    ON m.bID =ttt.bid 
WHERE aID = 1 

确定,基于对你的意见我编辑自己的帖子,试试这个

SELECT val, bid 
FROM map m 
LEFT JOIN table1 t 
    ON m.bID =t.bid 
WHERE aID = 1 
UNION 
SELECT val, bid 
FROM map m 
LEFT JOIN table2 tt 
    ON m.bID =tt.bid 
WHERE aID = 1 
UNION 
SELECT val, bid 
FROM map m 
LEFT JOIN table3 ttt 
    ON m.bID =ttt.bid 
WHERE aID = 1 
+0

这是不行的那么容易,它说'#1052列'val'在字段列表中是不明确的,那么我必须单独选择每个'val't.val','tt.val' ...并且由于我有很多字段,它将变得复杂。 – InTry

+0

好的,检查已编辑的答案 – miltos

+0

这是行得通,谢谢...在tableX上加入一个表的情况下,它必须针对每个tableX(table1,table2)单独完成? – InTry