oracle数据库的SQL转换到postgresql,关于表连接的问题。

Mosshill 2013-11-26 03:14:17
(好吧,其实要转换到富士通的Symfoware数据库,不过Symfoware是建立在postgresql上的。)
问题一:我在网上查到的例子:
ORACLE:
SELECT COUNT(DISTINCT(A.COL1)) AS RCOUNT FROM
  SCHEMA.PREFIX_TABLE1 A,SCHEMA.PREFIX_TABLE2 B,SCHEMA.PREFIX_TABLE3 C,SCHEMA.PREFIX_TABLE4 D
  WHERE 1 = 1
  AND A.COL2 = B.COL2
  AND A.COL3 = C.COL3(+)
  AND A.COL4 = D.COL4(+)
  AND A.COL5 > 0
  AND A.COL6 = '1'
POSTGRESQL:
select count(distinct(a.col1)) as rcount from
  schema.prefix_table1 a inner join schema.prefix_table2 b on (a.col2 = b.col2)
  left outer join schema.prefix_table3 c on (a.col3 = c.col3)
  left outer join schema.prefix_table4 d on (a.col4 = d.col4)
  where 1 = 1
  and a.col5 > 0
  and a.col6 = '1'
这里有一个问题?A.COL2 = B.COL2这一句,必须要写在inner join的on中吗?不可以直接写在where语句中吗?

问题二:
如下的一个oracle的SQL语句,转换为postgresql上是什么样子的呢?
ORACLE:
SELECT A.KEY1,A.KEY2,A.KEY3
FROM A,B,C,D,E
WHERE
A.KEY1 = B.KEY1(+) AND
A.KEY2 = B.KEY2(+) AND
B.KEY3 = C.KEY3(+) AND
A.KEY4 = D.KEY2(+) AND
A.KEY5 = E.KEY1

这里关于A表和B,D的左连接我知道了,但是与A表无关的B.KEY3 = C.KEY3(+)应该怎样转换呢?

请教各位了,多谢!
...全文
784 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero 2013-11-29
  • 打赏
  • 举报
回复
引用 2 楼 Mosshill 的回复:
[quote=引用 1 楼 iihero 的回复:] 问题一: A.COL2 = B.COL2这一句, 可以写到where里头 问题二: SELECT A.KEY1,A.KEY2,A.KEY3 FROM A LEFT OUTER JOIN B on A.key1=B.key1 and a.key2=b.key2 LEFT OUTER JOIN C on B.key3=c.key3 .....
多谢版主解答啊~ 关于问题二,我原来以为是要把B和C表先括起来得出个结果再与A连接,那再第三行的时候,是如何区分是要让B表和C表左连接而不是A表呢? 如果Oracle的sql文是这样的: SELECT A.KEY1,A.KEY2,A.KEY3 FROM A,B,C WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND B.KEY3 = C.KEY3(+) AND A.KEY4 = C.KEY4(+) 那么在POSTGRESQL这边的后面要怎么写呢? 是需要再写一遍LEFT OUTER JOIN C么? SELECT A.KEY1,A.KEY2,A.KEY3 FROM A LEFT OUTER JOIN B on A.key1=B.key1 and a.key2=b.key2 LEFT OUTER JOIN C on B.key3=c.key3 LEFT OUTER JOIN C on A.key4=c.key4[/quote] 应该是。你可以比较一下结果。用事实说话。
Mosshill 2013-11-29
  • 打赏
  • 举报
回复
引用 1 楼 iihero 的回复:
问题一: A.COL2 = B.COL2这一句, 可以写到where里头 问题二: SELECT A.KEY1,A.KEY2,A.KEY3 FROM A LEFT OUTER JOIN B on A.key1=B.key1 and a.key2=b.key2 LEFT OUTER JOIN C on B.key3=c.key3 .....
多谢版主解答啊~ 关于问题二,我原来以为是要把B和C表先括起来得出个结果再与A连接,那再第三行的时候,是如何区分是要让B表和C表左连接而不是A表呢? 如果Oracle的sql文是这样的: SELECT A.KEY1,A.KEY2,A.KEY3 FROM A,B,C WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND B.KEY3 = C.KEY3(+) AND A.KEY4 = C.KEY4(+) 那么在POSTGRESQL这边的后面要怎么写呢? 是需要再写一遍LEFT OUTER JOIN C么? SELECT A.KEY1,A.KEY2,A.KEY3 FROM A LEFT OUTER JOIN B on A.key1=B.key1 and a.key2=b.key2 LEFT OUTER JOIN C on B.key3=c.key3 LEFT OUTER JOIN C on A.key4=c.key4
iihero 2013-11-26
  • 打赏
  • 举报
回复
问题一: A.COL2 = B.COL2这一句, 可以写到where里头 问题二: SELECT A.KEY1,A.KEY2,A.KEY3 FROM A LEFT OUTER JOIN B on A.key1=B.key1 and a.key2=b.key2 LEFT OUTER JOIN C on B.key3=c.key3 .....

972

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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