日期:2014-05-16 浏览次数:20574 次
?公司的模拟机教员排班查询,
数据只需要从 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? 取得了最小的 。
?
测试结果显示 ,这样的排序完全符合要求 。
?
?