simplefare表
每条记录包含 一条运价的基本信息 以及 运价所适用的代理人结算号 protocalno 也就是说,表中的记录条数为 运价信息 * 结算号 当运价的运价编号(fare_number)和运价发布日期(app_date)相同时 认为它是唯一一条运价信息现在需要查询运价信息,要求无重复记录用哪种方法比较快点,我试过distinct 和 group by
都觉得慢,表中大约有10000+条记录,以后还会更多 请高手指点,我的问题有什么没说明白的,可以跟帖问,谢谢!
每条记录包含 一条运价的基本信息 以及 运价所适用的代理人结算号 protocalno 也就是说,表中的记录条数为 运价信息 * 结算号 当运价的运价编号(fare_number)和运价发布日期(app_date)相同时 认为它是唯一一条运价信息现在需要查询运价信息,要求无重复记录用哪种方法比较快点,我试过distinct 和 group by
都觉得慢,表中大约有10000+条记录,以后还会更多 请高手指点,我的问题有什么没说明白的,可以跟帖问,谢谢!
好像在输出中没有用的, 多余的吗?
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
)
agent_fare表在输出中的确没用,和simplefare表联查是为了剔除掉simplefare表中的无用数据,也就是说只查fare number在agent_fare中存在的数据(从simplefare)表中。
过滤数据不一定必须用连接,这可能产生没用的重复输出记录
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)