Oracle SQL - 加入不存在的行?

时间:2012-02-06 22:10:19

标签: sql oracle join

采用以下两个示例表:

Table A
Name   FirstOrLast
Jeremy First
Smith  Last
Mark   First
David  First


Table B
Name
Jeremy
Smith
Mark
David
Jones
Jack

我希望输出为:只输出名字,但如果表A不记录它是名字还是姓,那么无论如何输出它。正确的输出是:

Jeremy
Mark
David
Jones
Jack

我尝试使用外部联接完成此操作,如下所示:

select
  B.Name
from
  A, B
where
  A.name = B.name(+) and
  A.FirstOrLast = 'First';

但没有运气。我怎么能这样做?

4 个答案:

答案 0 :(得分:4)

执行左外连接且A中没有记录时,a.firstOrLast将为空。当你处于它的时候,你也可以切换到连接的标准语法:

select
    B.Name
from
    B
left outer join A on A.name = B.name
where
A.firstOrLast is null or A.firstOrLast = 'First';

但是,旧语法也应该有效:

select
    B.Name
from
    A, B
where
    A.name = B.name(+) and
    (A.firstOrLast is null or A.firstOrLast = 'First');

答案 1 :(得分:2)

试试这个:

SELECT  B.Name
FROM    B LEFT JOIN A ON B.Name = A.Name
WHERE   A.FirstOrLast = 'First' OR A.Name IS NULL;

答案 2 :(得分:0)

select b.name
from b
union
select a.namfe
from a
where a.firstOrLast = 'First'

答案 3 :(得分:0)

SELECT Name
FROM B
MINUS
SELECT Name
FROM A
WHERE FirstOrLast <> 'First'