2012-06-06 101 views
0

我有兩個表表-A和表-B,我想加入這些表格optain Table_c作爲結果:連接兩個表(其中一個是另一個的一部分)

表-A:

+-----------+-----------+---------+ 
| tableA_id | tableB_id | v_id | 
+-----------+-----------+---------+ 
| 1   | 2   | 27  | 
| 2   | 3   | 27  | 
| 3   | 3   | 28  | 
| 4   | 1   | 26  | 
| 5   | 2   | 26  | 
| 6   | 3   | 26  | 
| 7   | 1   | 24  | 
| 8   | 1   | 25  | 
+-----------+-----------+---------+ 

表-B:

+-----------+-----------+ 
| tableB_id | s_name | 
+-----------+-----------+ 
| 1   | s1  | 
| 2   | s2  | 
| 3   | s3  | 
+-----------+-----------+ 

Table_c:

+-----------+-----------+-----------++--------+ 
| tableB_id | s_name | tableA_id | v_id | 
+-----------+-----------+-----------+---------+ 
| 1   | s1  | null  | null | 
| 2   | s2  | 1   | 27  | 
| 3   | s3  | 2   | 27  | 
+-----------+-----------+-----------+---------+ 

我嘗試了不同的查詢,但我無法達到所需的輸出。 這是MYSQL查詢:*編輯:反轉表順序。

SELECT s.tableB_id, s.s_name, v.tableA_id, v.v_id 
FROM Table_B as s 
left OUTER JOIN Table_A as v 
ON v.v_id=27 

編輯: 結果應該是左邊的所有表-B的數據,並分配給它TABLE_A數據,如果任何或使其無效。我怎樣才能做到這一點?

最後編輯: 這裏是我想出了一個解決方案:

SELECT s.tableB_id , s.s_name, v.tableA_id, v.v_id 
FROM Table_B s , Table_A v 
WHERE v.v_id=27 AND v.tableB_id = s.tableB_id 

UNION 

SeLECT s.tableB_id , s.s_name, null as tableA_id, null as v_id 
FROM Table_B s 
WHERE s.tableB_id NOT IN (SELECT s.tableB_id 
FROM Table_B s , Table_A v 
WHERE v.v_id=27 AND v.tableB_id = s.tableB_id) 
+0

提示:這是你的where子句'ON v.v_id = 27'。你應該加入共同的專欄。 – Ben

回答

0

你可以嘗試:

SELECT tb.tableB_id, tb.s_name, ta.tableA_id, ta.v_id 
FROM Table_B tb LEFT JOIN Table_A ta 
    ON tb.tableB_id = ta.tableB_id 

只能選擇一個,你可以使用:

SELECT tb.tableB_id, tb.s_name, ta.tableA_id, ta.v_id 
FROM Table_B tb LEFT JOIN 
(SELECT * FROM Table_A 
WHERE v_id = 27) ta 
    ON tb.tableB_id = ta.tableB_id 
+0

這給我Table_B數據僅與v_id = 27(2行)相關聯,但我希望所有Table_B數據在右側。 – Yasmeen

+0

@Yasmeen:嘗試我編輯的答案 – Marco

+0

我現在試過,它的工作原理。謝謝:)我還發現了一個解決方案(最後編輯在我的問題),但我認爲你更明顯。 – Yasmeen

0
SELECT distinct s.tableB_id, s.s_name, v.tableA_id, v.v_id 
FROM Table_A as v 
left OUTER JOIN Table_B as s 
ON v.tableB_id =s.tableB_id and v.v_id = 27; 
0

使用此查詢的希望完全你會得到結果

SELECT s.tableB_id, s.s_name, v.tableA_id, v.v_id 
FROM Table_A as v 
left OUTER JOIN Table_B as s ON s.tableB_id=v.tableB_id 
WHERE v.v_id=27 
0

順序顛倒,使之b LEFT JOIN a並添加條件的公共列(tableB_id):

SELECT s.tableB_id, s.s_name, v.tableA_id, v.v_id 
FROM Table_B as s 
    LEFT OUTER JOIN Table_A as v 
    ON v.tableB_id = s.tableB_id 
    AND v.v_id=27 ; 
相關問題