2013-08-30 48 views
1

我有一個TABLE_A如何加入兩個在條件對同一領域

| id | status1 | status2 | 
+------+---------+---------+ 
| 1 |  2 | 3 | 
+------+---------+---------+ 
| 2 |  1 | 3 | 
+------+---------+---------+ 

和表-B

| id | name | 
+------+---------+ 
| 1 | yep | 
+------+---------+ 
| 2 | nope | 
+------+---------+ 
| 3 | maybe | 
+------+---------+ 

我怎樣才能輸出到這個樣子?

1 = nope,也許;
2 =是的,也許

我想是這樣的:

SELECT * FROM table_A a 
LEFT JOIN table_B b 
ON a.status1= b.id AND a.status2= b.id" 

回答

2

你想要做兩連接,一個爲每個狀態字段:

SELECT a.id, b1.name as name1, b2.name 
FROM table_A a LEFT JOIN 
    table_B b1 
    ON a.status1 = b1.id LEFT JOIN 
    table_B b2 
    on a.status2= b2.id; 

編輯:

用於娛樂的緣故,你可以用一個連接和聚合做到這一點:

select a.id, 
     max(case when a.status1 = b.id then b.name end) as name1, 
     max(case when a.status2 = b.id then b.name end) as name2 
from table_A a left join 
    table_B b 
    on b.id in (a.status1, a.status2) 
group by a.id; 

然而,這兩個聯接版本實際上是簡單。

+0

我明白了。我認爲這可以通過一個連接完成。謝謝! – InTry

2

你也可以做這樣的:

SELECT * FROM table_A a 
LEFT JOIN table_B b ON a.status1= b.id 
LEFT JOIN table_B bTmp ON a.status2= bTmp.id 
+0

謝謝。我接受了戈登的回答,因爲它是第一個。 – InTry

+0

好的沒問題! 最好的問候:) –

2

如果您想要一列完全爲yep, maybenope, maybe,則需要GROUP_CONCAT function

你可以逃脫一個連接,如果你的「非轉動」你table_a,這就是我的回答子查詢的作用:

SELECT 
    a.id, 
    GROUP_CONCAT(b.name ORDER BY b.name DESC) 
FROM (
    SELECT id, status1 AS stat_id FROM table_a 
    UNION SELECT id, status2 FROM table_a 
) a 
INNER JOIN table_b b ON a.stat_id = b.id 
GROUP BY a.id; 

ORDER BYGROUP_CONCAT確保yepmaybe之前nope在逗號分隔列表中的maybe之前。

+0

謝謝你的清楚解釋。不,我不需要那樣的輸出,這只是理解它的例子。我接受戈登的回答,因爲他速度更快;)。 – InTry

+0

不客氣,不用擔心 - 當所有的答案都能幫助接受最快的答案時:) –

0
select a.id, b1.name, b2.name from tableB as b1 
inner join TableA as a 
on b1.id = a.status1 
inner join TableB as b2 
on b2.id = a.status2