oracle操作笔记

根据某些条件返回不同的值

mysql写过:if(表达式, A, B)

oracle只能这么写:case when 表达式 then A else B end,感觉mysql的好写多了,至于有没有性能上的问题,还没想过。


多表间的数据更新

mysql:

update t1,t2 set t1.a=t2.a  where t1.id=t2.id

oracle:

update t1 set t1.a=(select t2.a from t2 where t1.id=t2.a) 

where exists(select 1 from t2 where t1.id=t2.id)

案例:在多表更新中,经常存在着一个id对应多条的记录,要取出最有效的一条

第一种:

update t1 set t1.a=

(

select t2.a from t2

(select t2.id,max(t2.update_time) maxtime from t2  group by t2.id) tm 

where t2.id=tm.id and t2.update_time=tm.maxtime and t2.id=t1.id

)

where exists(...)

第二种:

update t1 set t1.a=

(

select a  from (select t2.*,row_number()over(order by update_time desc) rn from t2 where t1.id=t2.id) where rn=1 ;

)

where exists(...)

//todo 还有一个是关于oracle版本问题的


查询指定记录的上一条下一条:

mysql:

//todo

oracle:

select c.p from (select id, lag(id,1,0)  over (order by update_time) as p from t1) c where c.id='111';

select c.n from (select id, lead(id,1,0)  over (order by update_time) as p from t1) c where c.id='111';




转载于:https://my.oschina.net/u/2449014/blog/537077

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值