Oracle支持LEFT OUTER JOIN吗?

mastererp 2003-05-01 12:07:29
我用这个来创建一个view,但是报错,说ORA-00933 sql command not properly ended。语句如下:
SELECT I.STUFF_ID, I.STUFF_NAME, I.STUFF_AMOUNT, I.UNIT_PRICE, I.ACCOUNTUNIT_NO, I.NOW_QUANTITY,I.IN_PRINT, I.OUT_PRINT,
O.AMOUNT_OUT_SUM, O.UNITPRICE_OUT_AVG,
A.ACCOUNTUNIT_NAME
FROM T_QINGQIAN_STUFFIN I LEFT OUTER JOIN V_QINGQIAN_STUFFOUT_SUM O ON O.STUFF_ID = I.STUFF_ID,
DICT_ACCOUNTUNIT A INNER JOIN I ON A.ACCOUNTUNIT_NO = I.ACCOUNTUNIT_NO


如果不能用的话,用什么方法来取得同样的效果?也就是说即使O Table中没有 I Table关联数据,也能把I Table中的所有数据都取出来??
...全文
747 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-05-01
  • 打赏
  • 举报
回复
学生表
学号 姓名
0001 小李
0002 小王
0003 小朱
0004 小黄
选课表
学号 课程
0001 高数
0002 线数
0004 英语
0005 电脑

--左(外)联接
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 = 选课表.学号(+)
查询的结果是:
学号 姓名 课程
0001 小李 高数
0002 小王 线数
0003 小朱
0004 小黄 电脑
学生表.学号 = 选课表.学号(+)表示
学生表(也就是左边的表)所有行都会被返回
即使选课表中没有相应的行与学生表中的行匹配

--右(外)联接
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号(+) = 选课表.学号
查询的结果是:
学号 姓名 课程
0001 小李 高数
0002 小王 线数
0004 小黄 电脑
0005 电脑
学生表.学号(+) = 选课表.学号表示
选课表(也就是右边的表)所有行都会被返回
即使学生表中没有相应的行与选课表中的行匹配


不同的数据库系统对外联接有不同的表示
有此根本不兼容

如(还是以上例为基础)

MS SQL SERVER 外联接的SQL写法
--左(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 *= 选课表.学号
--左(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 LEFT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--右(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 =* 选课表.学号
--右(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--注:在MS SQL SERVER中,OUTER关健字可以省略

ACCESS 外联接的SQL写法
--左(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 LEFT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--右(外)联接 - 第二种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号 = 选课表.学号
--注:在ACCESS中,关健字OUTER不可以省略

ORACLE 外联接的SQL写法
--左(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号 = 选课表.学号(+)
--右(外)联接 - 第一种写法
SELECT 学生表.*, 选课表.课程
FROM 学生表, 选课表
WHERE 学生表.学号(+) = 选课表.学号

ORACLE直到9i才支持SQL-92外联接语法
LEFT (OUTER)JOIN和RIGHT (OUTER) JOIN
和MS SQL SERVER一样
关健字OUTER是可以省略的
more_zou 2003-05-01
  • 打赏
  • 举报
回复
select
from table0,table1
where table0.id(+)=table.id;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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