求助优化一段SQL语句

清泉灵弦 2013-12-30 09:50:10
表E和表F均有jh,create_date字段,需要将符合一定条件的F表内容附加到与E表一致的记录上,例如,F表和E表均有记录A,两者jh,create_date相同时,若F表中符合条件的记录则附加到E表,不符合则保持为NULL,要求是F表的记录匹配到E表时不能产生新的冗余重复数据

select e.*,f.completion_id,f.completion_name,f.completion_number,f.top_md,f.bottom_md
from (
--表E内容
) e left join (
--表F内容
) f
on e.jh=f.jh and e.create_date=f.create_date and (f.top_md=0 or f.bottom_md=0 or (f.top_md<=e.syds and f.bottom_md>=e.syds+e.syhd));

关键就在于这最后的on条件上,但逻辑上还只能是这么处理,搞了一周都没想出来怎么整,求大神优化
...全文
199 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
清泉灵弦 2013-12-30
  • 打赏
  • 举报
回复
引用 2 楼 z_shousi 的回复:
select e.*,f.completion_id,f.completion_name,f.completion_number,f.top_md,f.bottom_md from ( --表E内容 ) e left join ( --表F内容 ) f on e.jh=f.jh and e.create_date=f.create_date 可以在红色部分根据jh和crete_date分组筛选下先、
不是分组的问题,分组的效率更差你应该清楚吧
清泉灵弦 2013-12-30
  • 打赏
  • 举报
回复
引用 3 楼 zlloct 的回复:
这样呢:
select e.*,f.* from e,(select * from f where f.top_md=0 or f.bottom_md=0 or (f.top_md<=e.syds and f.bottom_md>=e.syds+e.syhd)) f where e.jh=f.jh(+) and e.create_date=f.create_date(+)
这个我之前就试过,会产生冗余数据,F表中符合条件的有多少条记录,E表就会多匹配出几条空记录,没办法筛选掉的,也就是说按条件筛选过去后,原来的数据并没有覆盖掉而是同时存在,所以数据不干净
CT_LXL 2013-12-30
  • 打赏
  • 举报
回复
这样呢:
select e.*,f.* from e,(select * from f where f.top_md=0 or f.bottom_md=0 or (f.top_md<=e.syds and f.bottom_md>=e.syds+e.syhd)) f where e.jh=f.jh(+) and e.create_date=f.create_date(+)
  • 打赏
  • 举报
回复
select e.*,f.completion_id,f.completion_name,f.completion_number,f.top_md,f.bottom_md from ( --表E内容 ) e left join ( --表F内容 ) f on e.jh=f.jh and e.create_date=f.create_date 可以在红色部分根据jh和crete_date分组筛选下先、
_拙计 2013-12-30
  • 打赏
  • 举报
回复
可能union all会快点吧
清泉灵弦 2013-12-30
  • 打赏
  • 举报
回复
引用 7 楼 Xinke57 的回复:
先把数据整合,然后用条件筛选试试看,也就是你的e表和f表先合到一起,然后where条件筛选,再在字段里用case when判断下
大神就是大神,分给你了
Xinke57 2013-12-30
  • 打赏
  • 举报
回复
先把数据整合,然后用条件筛选试试看,也就是你的e表和f表先合到一起,然后where条件筛选,再在字段里用case when判断下
清泉灵弦 2013-12-30
  • 打赏
  • 举报
回复
有没有大神了

17,086

社区成员

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

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