公司的模拟机教员排班查询,
数据只需要从 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 取得了最小的 。
测试结果显示 ,这样的排序完全符合要求 。
- 大小: 74.5 KB
分享到:
相关推荐
而`orderByAsc`方法与`orderBy`类似,也是用于升序排序,但它的存在是为了与`orderByDesc`保持一致,提高代码可读性。如果你习惯于使用`orderByAsc`,可以这样写: ```java List<User> users = userMapper.select...
MySQL数据库在处理含`ORDER BY`的SQL语句时,索引优化是非常关键的一环,因为这直接影响到查询性能。以下是一些关于如何利用索引来优化`ORDER BY`语句的知识点: 1. **合理创建索引**:索引可以显著提高数据读取...
- 在子查询中不允许使用ORDER BY子句,ORDER BY应该用于外部查询,对最终结果进行排序。 3. **嵌套子查询的执行顺序**: - 子查询先于外部查询执行。子查询的结果被外部查询使用,作为筛选条件,从而决定外部查询...
4. **Order By支持**:可以设置查询结果的排序方式,根据需要选择升序或降序排列特定字段,这对于数据分析和展示尤为重要。 5. **日期和Like操作**:组件提供了处理日期和Like操作的便利,允许在查询中包含日期比较...
同时,对于复杂的查询,可能需要结合使用JOIN、WHERE子句、GROUP BY、HAVING等SQL元素来构造更复杂的查询语句。 标签"SQLite"表明了这个话题是关于SQLite数据库的,这包括但不限于创建表、插入数据、更新数据、删除...
这里同样使用了`union all`和`order by`来构造一个特殊的SQL查询,旨在获取管理员相关的表信息。 ### 四、关键技术点 1. **Union All**:该命令用于合并多个查询的结果集。在构造畸形SQL语句时,可以通过添加额外...
[ WHERE condition ][ [ START WITH condition ] CONNECT BY condition [ ORDER SIBLINGS BY expression ] ] ``` 其中,`START WITH`子句用于指定查询的起始节点,`CONNECT BY`子句用于指定查询的递归条件。 ...
6. **子查询**:DetachedCriteria支持创建子查询,可以嵌套在主查询中,以实现复杂的查询逻辑。 7. **动态查询**:QBC的动态性体现在可以根据运行时的参数灵活构造查询条件,非常适合在用户输入不确定的情况下构建...
然而,在处理某些复杂查询场景时,如多表联合查询、子查询或自定义SQL逻辑,可能需要结合使用查询构造器与原生SQL语句。下面我们将详细探讨如何在Laravel中结合两者进行查询。 首先,让我们了解一下Laravel查询构造...
- 子查询不能包含ORDER BY子句,除非是在进行Top-N分析时。 - 子查询分为单行子查询(返回一行)和多行子查询(返回多行)。 - 单行子查询使用单行比较运算符,而多行子查询可能需要多行运算符。 5. **查询方法*...
多表连接的 SQL 查询用于连接两个或更多的表,以便从多个表中检索数据。数据源之间的连接用关键词是“INNER JOIN… ON”,INNER JOIN 表示等值连接。 例如: FROM 学生基本信息表 INNER JOIN 成绩表 ON 成绩表....
3. **ORDER BY 子句**:除非进行Top-N分析,否则不建议在子查询中使用ORDER BY子句。 4. **操作符的选择**:根据子查询返回的结果行数选择合适的操作符,单行子查询使用单行操作符(如`=`、`、`>`等),多行子查询则...
- **优点**:HQL具有强大的功能,可以处理复杂的查询,包括关联查询、子查询和集合操作。同时,HQL支持动态查询,可以根据参数动态构造查询语句,适合于复杂或动态的查询需求。 - **基本结构**:HQL查询通常以`from...
2. 使用ROW_NUMBER()优化:在SQL Server中,使用`ROW_NUMBER()`结合子查询可以避免`OFFSET`的性能问题,尤其是在大数据量时。 3. 计算总页数:在Java中,通常需要计算总页数,可以通过单独查询获取总记录数再除以每...
- **A选项**:子查询可以有`ORDER BY`,但这通常用于`SELECT`子句中的子查询,而不是外部查询的`ORDER BY`。 - **B选项**:可以使用子查询作为临时表,即在`FROM`子句中嵌套一个查询来处理数据。 - **D选项**:子...
在处理大数据时,可以考虑先通过JOIN或子查询减少数据量,然后再排序。 此外,SQL还支持JOIN操作,用于合并来自多个表的数据。在大数据环境下,优化JOIN操作至关重要,可以使用物化视图、预计算或分布式JOIN策略来...
在SQL Server 2005中,查询主要通过SELECT语句进行,该语句具有多个子句,包括ALL或DISTINCT、TOP、INTO、FROM、WHERE、GROUP BY、HAVING、ORDER BY、COMPUTE以及COMPUTE BY。这些子句共同构建了一个功能强大的查询...
总结来说,子查询在MySQL中是用于增强查询能力的关键构造,可以处理复杂的查询需求,如筛选满足特定条件的记录、获取最高/最低值、查找关联数据等。熟练掌握子查询能大大提高SQL编程的效率和灵活性,是数据库开发者...