SQL效率求助!

tyxsoft 2006-11-15 04:05:50
simplefare表
每条记录包含 一条运价的基本信息 以及 运价所适用的代理人结算号 protocalno

也就是说,表中的记录条数为 运价信息 * 结算号

当运价的运价编号(fare_number)和运价发布日期(app_date)相同时 认为它是唯一一条运价信息

现在需要查询运价信息,要求无重复记录

用哪种方法比较快点,我试过distinct 和 group by
都觉得慢,表中大约有10000+条记录,以后还会更多

请高手指点,我的问题有什么没说明白的,可以跟帖问,谢谢!
...全文
279 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyxsoft 2007-03-05
  • 打赏
  • 举报
回复
谢谢大家,不好意思忘了结帖,现在补上!
小李木耳 2006-11-29
  • 打赏
  • 举报
回复
试试:
select t.FARE_NUMBER,
t.APPROVED_DATE,
max(t.DEPARTURE),
max(t.DESTINATION),
max(t.OW_ADULT_FARE),
max(t.RT_ADULT_FARE)
from simplefare t
where t.APPROVED_DATE||t.FARE_NUMBER in (select distinct a.approved_date||a.fare_number from agent_fare a)
group by t.FARE_NUMBER, t.APPROVED_DATE
或:
select t.FARE_NUMBER,
t.APPROVED_DATE,
max(t.DEPARTURE),
max(t.DESTINATION),
max(t.OW_ADULT_FARE),
max(t.RT_ADULT_FARE)
from simplefare t
group by t.FARE_NUMBER, t.APPROVED_DATE
having t.APPROVED_DATE || t.FARE_NUMBER in (select distinct a.approved_date ||
a.fare_number
from agent_fare a)
山林73 2006-11-28
  • 打赏
  • 举报
回复
simplefare表 主键??????????

t.FARE_NUMBER, t.APPROVED_DATE, ???

agent_fare a 主键???
过滤数据不一定必须用连接,这可能产生没用的重复输出记录
tyxsoft 2006-11-27
  • 打赏
  • 举报
回复
回楼上的,max函数没有实际意义,只是因为用了group by,为了让语法通过才用的。
agent_fare表在输出中的确没用,和simplefare表联查是为了剔除掉simplefare表中的无用数据,也就是说只查fare number在agent_fare中存在的数据(从simplefare)表中。
山林73 2006-11-27
  • 打赏
  • 举报
回复
记录不算多,这里看不明白表结构和主键,查询中怎么会有那么多max

应该把索引建好

agent_fare a,在查询中时起什么作用的
好像在输出中没有用的, 多余的吗?


select t.FARE_NUMBER, t.APPROVED_DATE, t.DEPARTURE,
t.DESTINATION,t.OW_ADULT_FARE, t.RT_ADULT_FARE
from simplefare t
where exists(
select * from , agent_fare a
where t.APPROVED_DATE = a.approved_date and t.FARE_NUMBER = a.fare_number
)


icedut 2006-11-27
  • 打赏
  • 举报
回复
t.FARE_NUMBER, t.APPROVED_DATE

这两个字段加索引应该会快一点
tyxsoft 2006-11-27
  • 打赏
  • 举报
回复
沉了呀~ 好歹也有20分吧
tyxsoft 2006-11-15
  • 打赏
  • 举报
回复
select t.FARE_NUMBER, t.APPROVED_DATE, max(t.DEPARTURE), max(t.DESTINATION), max(t.OW_ADULT_FARE), max(t.RT_ADULT_FARE) from simplefare t, agent_fare a where t.APPROVED_DATE = a.approved_date and t.FARE_NUMBER = a.fare_number group by t.FARE_NUMBER, t.APPROVED_DATE

这是我自己写的,但是慢
whqcfp 2006-11-15
  • 打赏
  • 举报
回复
先写一个出来,才能确定那可以优化,否则....

17,140

社区成员

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

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