免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3715 | 回复: 11
打印 上一主题 下一主题

求一SQL写法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-17 08:07 |只看该作者 |倒序浏览
有二张表 hzb 和 lsz
hzb 中字段有 zh,ye  (主键为zh)每个记录是唯一的
lsz 中字段有 zh,jyr,ye   记录不唯一
hzb表
zh      ye
223    2000.00
224    1002.23
221    1001.00
lsz表
zh     ye      jyr(交易时间)
223   100   200809110823
223   50    200809110924
223   10    200809110531
221   100   200809120512
221   1000  200809140648


想把表hzb中ye字段值(根据两表帐号相等)更新为表lsz中jyr 最大的ye值 结果变为
zh      ye
223     50
221     1000


如何用语句实现,这两个表中记录都好几十万条要求一条执行高效点的.

论坛徽章:
0
2 [报告]
发表于 2008-09-17 08:41 |只看该作者
有点疑问
zh      ye
223    2000.00
224    1002.23
221    1001.00

zh      ye
223     50
221     1000
224怎么没有了?不知道lz想怎么处理

论坛徽章:
0
3 [报告]
发表于 2008-09-17 08:46 |只看该作者
with
xye as (
   select /*+ full (lzh) parallel (8) */
       zh,
       ye,
       rank () over (
          partition by zh, jyr
          order by zh, jyr desc, ye desc, rowid asc
       ) as xrnk
    from lzh
)
update /*+ index (hzb) */
hzb
set ye =  (
    select
       ye
     from xye
     where hzb.zh = xye.zh
);

论坛徽章:
0
4 [报告]
发表于 2008-09-17 08:52 |只看该作者
好像有问题,至少还需要有xrnk=1这个条件:) 呵呵
长时间没有写oracle下的东西了,有点儿记不清楚了

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
5 [报告]
发表于 2008-09-17 10:43 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2008-09-17 11:43 |只看该作者
上面两个SQL没有仔细看,但是有一点,如果lsz没有的zh,在hzb中,ye会被update为NULL,这一点就要看LZ的需求是什么了

论坛徽章:
0
7 [报告]
发表于 2008-09-17 12:51 |只看该作者
原帖由 doni 于 2008-9-17 11:43 发表
上面两个SQL没有仔细看,但是有一点,如果lsz没有的zh,在hzb中,ye会被update为NULL,这一点就要看LZ的需求是什么了


如果lsz没有的zh  不能更新成NULL 呀 ,如果lsz中没有的zh 要求在hzb中的ye 保持不变呀

论坛徽章:
0
8 [报告]
发表于 2008-09-17 13:03 |只看该作者
原帖由 ILoveMK 于 2008-9-17 10:43 发表
update hzb a set ye=(select distinct max(ye) keep(dense_rank last order by
jyr) from lsz b where a.zh=b.zh)



提示未找到预期的关键字from

论坛徽章:
0
9 [报告]
发表于 2008-09-17 13:16 |只看该作者
原帖由 crosslife 于 2008-9-17 08:41 发表
有点疑问
zh      ye
223    2000.00
224    1002.23
221    1001.00

zh      ye
223     50
221     1000
224怎么没有了?不知道lz想怎么处理



在lsz 中没有hzb 表的记录时,hzb 中的记录ye值保持不变

论坛徽章:
0
10 [报告]
发表于 2008-09-17 13:53 |只看该作者
用exists就可以保证不匹配的不被修改为null
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP