日期:2014-05-16  浏览次数:20587 次

为了 order by 构造子表查询

?公司的模拟机教员排班查询,

数据只需要从 SIM_TEACHER 表里面得到, 但是遇到了排序问题。

本来只需要根据 Teacher No 排序, 但是后来修改时 ,需要将 Teacher 数据删除,重新写入, 导致了Teacher No 混乱, 这下 ,可不能根据 Teacher No 排序了, 要找到排序字段, 需要关联到 SIM_TRAINING_SIM (SIM_TEACHER_ID), 再由 SIM_TRAINING_SIM 关联到 SIM_SUITE (SUITE_ID)? 如图:

根据 SIM_SUITE 的 SUITE_NO , BATCH_NO 进行排序 。


如此多重的关联 , 而且, 考虑到将来跨套组的情况, 一个 SIM_TEACHER? 还有可能对应到 多个 SIM_TRAINING_SIM ,这种情况下, 要取对应在 SIM_TRAINING_SIM 表里面的 SUITE_ID 最小值 如何设计 SQL? 呢 ? 

?

搜索到关于 LEFT JOIN 最小值关联的帖子, 设计到了 SQL? :

?

?

    select 
 t.PILOT_ID as pilotId,
 p.pilot_name as pilotName,
 t.TEACHER_LOCK as teacherLock,
 d.unit_name as TUnitName
  from SIM_TEACHER  t inner join 
  flight.bd_aero_unit d on substr(t.t_unit,1,4)=d.unit_code
  left join 
  flight.pilot_basic_info p on p.basic_info_id = t.PILOT_ID join
(
select t.batch_no , t.suite_no , m.sim_teacher_id , min(m.suite_id) suite_id
from sim_suite t 
join sim_training_sim m on t.suite_id = m.suite_id
join sim_teacher      u on m.sim_teacher_id = u.sim_teacher_id
group by t.batch_no , t.suite_no , m.sim_teacher_id
) sort on
sort.sim_teacher_id = t.sim_teacher_id
order by sort.batch_no, sort.suite_no, t.t_unit

?

?

?

在这里 , 构造了子表? SORT , 并且根据 SUIT_ID? 取得了最小的 。

?

测试结果显示 ,这样的排序完全符合要求 。

?

?