老式 outer join 的问题

Leejs413 2008-07-09 02:18:27
在一段代码中,看到了下面的一段sql语句,搞了半天明白了(+)=相当于left outer join
但是(+)<>就弄不明白了,好像是老式的outer join语句,而且不能和left outer join混用

SELECT *
FROM A,B
WHERE A.ID (+)= B.ID
AND A.origin(+)<>'U'

大家帮忙看看,谢谢了
...全文
103 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leejs413 2008-07-09
  • 打赏
  • 举报
回复
谢谢1楼的回答,但是这样理解查询结果不一样
又尝试了一下,发现在老式的<>还是有一些区别的

建了两个表A,B
A_ID A
---------- -
1 a
2 a

B_ID B
---------- -
1 b
2 b

select *
from A
left outer join B
on A.A_ID = B.B_ID
where A.A_ID<>'2';

select *
from A,B
where A.A_ID(+)=B.B_ID
and A.A_ID(+)<>'2'

这两个语句的查询结果不一样,分别是
A_ID A B_ID B
---------- - ---------- -
1 a 1 b


A_ID A B_ID B
---------- - ---------- -
1 a 1 b
2 b

也就是说老式的查询是先过滤再进行outer join
现在的都是先outer join完再过滤数据
gaohaha 2008-07-09
  • 打赏
  • 举报
回复
= 号 相当于 left outer join on aa.aa=bb.bb 的等号
<> 相当于 left outer join on aa.aa<>bb.bb 的不等号

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧