2012-06-06 42 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 ; 
相关问题