2015-12-16 54 views
0

首先,對於這個問題的措辭表示歉意,因爲它對我來說似乎相當不足。MySQL LEFT JOIN一致地從多個表中返回數據

我有三個表格:t1t2t3。他們都共享一個外鍵id,這也是他們的主要關鍵。我想要做這樣的事情:

SELECT col1, col2 FROM t1 LEFT JOIN (t2, t3) ON (t1.id=t2.id AND t1.id=t3.id); 

自然,當t1沒有匹配的行,即使其它表做查詢將返回空。我無法預測哪個表可能包含或可能不包含數據,但我仍想返回值(對於不匹配的表,使用NULL s)。我該怎麼做?

我想通過定義LEFT JOIN,這是預期的行爲。所以,也許是我應該使用的另一種JOIN!

編輯

t1 

id col1 col2 
------------------ 

<EMPTY> 


t2 
----- 
id col3 col4 
------------------ 
1  foo  bar 
2  faa  boo 
3  faz  baz  



t3 
----- 
id col5 col6 
------------------ 
3  hoo  har 
4  haa  boo 

當我這樣做:

SELECT * FROM t1 <WHATEVER JOIN> (t2, t3) ON (t1.id=t2.id AND t1.id=t3.id) WHERE id = 3; 

我想看到的東西,如:

id: NULL 
col1: NULL 
col2: NULL 
col3: faz 
col4: baz 
col5: hoo 
col6: har 
+0

更大的問題是:你想輸出什麼?如果你想要3之間的任何共同性,那麼爲什麼不暗示加入OR和所有3個排列? (t1.id = t2.id或t1.id = t3.id或t2.id = t3.id) – user3741598

回答

0

對於具體的例子,你提供的,該查詢給你正確的結果:

SELECT t1.id as id, 
     t1.col1 as col1, 
     t1.col2 as col2, 
     b.col3 as col3, 
     b.col4 as col4, 
     b.col5 as col5, 
     b.col6 as col6 
FROM t1 
RIGHT JOIN (
SELECT t2.id as id, 
     t2.col3 as col3, 
     t2.col4 as col4, 
     t3.col5 as col5, 
     t3.col6 as col6 
FROM t2 
JOIN t3 ON t2.id = t3.id) B 
on t1.id = b.id;