2014-01-15 202 views
1

我有2个SQL Oracle数据表。如何连接两个表

A: Col1 | Col2 | Key 
    c1  c2 1 
    c3  c4 2 
    c5  c6 3 


B: Co1 | Co2 | Key 
     a1  a2 2 
     a3  a4 3 

我需要选择让我下表:

C: 
    a1 a2 c3 c4 
    a3 a4 c5 c6 
    - - c1 c2 

我怎样才能用SQL做呢?正常加入:

select * from a, b where a.key = b.key; 

没有给出预期的结果。

回答

4

你需要一个左外连接:

select b.col1, b.col2, a.col1, a.col2 
from a left outer join 
    b 
    on a.key = b.key; 
+0

谢谢!我会测试它,然后接受。 – Tony

+1

完美的作品。 http://sqlfiddle.com/#!4/2aa79/4/0当你想从左侧的对象中获得所有的东西时,使用'left outer join'即使没有任何与右侧对象相关的东西(左边的外连接) –

2

在做一个连接你好像只会返回存在于两个表中的条目。为了得到你正在寻找尝试这样的结果......

SELECT B.Co1, B.Co2, A.Col1, A.Col2 
FROM A 
LEFT JOIN B ON A.Key = B.Key 
+0

from子句中的表的顺序不正确。请检查接受的答案。 – Tony

2

尝试此查询:

SELECT B.Co1, B.Co2, A.Col1, A.Col2 
FROM A,B 
WHERE A.Key = B.Key(+); 
0

你好你可以试试这个:

SELECT b.Col1, b.Col2, a.Co1, a.Co2 FROM s 
LEFT JOIN a ON a.Key = b.Key 

JOIN (INNER JOIN)

INNER JOIN关键字选择两个表中的所有行,只要列。如果“A”表中的行中没有“B”中的匹配项,则不会列出这些行。

LEFT JOIN

左JOIN关键字返回所有左表中的(A)的行,即使是在正确的表(B)中没有匹配。

+0

from-clause中的表的顺序不正确。请检查接受的答案。 – Tony