以这两个例子表:Oracle SQL - 连接不存在的行吗?
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';
,但没有运气。我怎样才能做到这一点?
这很好。两个问题:为什么“标准”语法更好(我的公司使用(+)语法,但我对sql很新,所以我愿意改变我的样式)。二,你能解释一下A.name = B.name(+)在这里完成的事情吗? – Jeremy 2012-02-06 22:22:47
@Jeremy旧的语法只适用于Oracle;新的语法适用于大多数现代RDBMS。在SQL进行了标准化之前,RDBMS供应商为此定义了自己的语法:例如,Sybase使用了'A.name * = B.name'。外连接标记'(+)'表示“即使右边的行不存在,也不要删除左边的行”。 – dasblinkenlight 2012-02-06 22:26:30