为了 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  取得了最小的 。

 

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值