`
gegewuqin9
  • 浏览: 28882 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

解决union后order by失效的办法

sql 
阅读更多
今天遇到了union后order by失效的情况,具体情况我就偷懒摘抄了网上的一个示例,如下:

比如有一张学生表student 和教师表 teacher , 我们要查询所有的教师学生的姓名和年龄,教师排前面,学生排后面,分别按字母顺序,则可能会想写一个这样的Sql语句: (注意,这个语句只是为了说明问题,这并不是一个正确的语句)
SELECT Name,Age FROM Teacher ORDER BY Name 
UNION 
SELECT Name,Age FROM Student ORDER BY Name

实际上,MSSQL并不允许我们写这样的语句,因此将会报错 UNION 附近有语法错误.

示例中作者给出了解决办法如下(这个我没试过,感觉这个方法太奇怪,纯粹是为了解决问题而凑出来的):
SELECT * FROM (SELECT TOP 99.999999 PERCENT Name,Age FROM Teacher ORDER BY Name) A 
UNION 
SELECT * FROM (SELECT TOP 99.999999 PERCENT Name,Age FROM Student ORDER BY Name) B


我想其实大多数情况下排序的字段应该是同一个,于是我想到了下面的方法,经测试可以实现:
(SELECT 1 as type, t.Name,t.Age FROM Teacher t)
UNION 
(SELECT 2 as type, s.Name,s.Age FROM Student s) ORDER BY type,Name
分享到:
评论

相关推荐

    MySQL 通过索引优化含ORDER BY的语句

    5. **`ORDER BY + LIMIT`组合优化**:为`ORDER BY`后的列建立索引可以优化这种类型的查询。例如: ```sql SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT]; ``` 在`[sort]...

    MySQL数据库索引失效的10种场景.zip

    在使用GROUP BY和ORDER BY时,如果未指定的所有列都在索引中,且没有其他非聚合函数,MySQL可能会使用索引。否则,它可能需要进行排序或临时表操作,导致索引失效。 **10. 分组后过滤(HAVING子句)** 在GROUP BY...

    MySQL中or、in、union与索引优化详析

    2. `SELECT * FROM order WHERE status IN (0, 1) ORDER BY date DESC` 在这种情况下,虽然`IN`操作符可以使用索引,但是`ORDER BY`操作可能会导致索引失效,因为MySQL可能需要额外的步骤来排序结果。 3. `SELECT *...

    导致MySQL索引失效的一些常见写法总结

    10. **分组和排序(GROUP BY 和 ORDER BY)**:如果分组或排序的列没有索引,MySQL可能需要进行临时排序,导致索引失效。 11. **索引覆盖不完全**:如果查询只选择了索引中的部分列,而其他列需要回表获取,MySQL...

    mybatis和mysql.docx

    6. **ORDER BY 使用错误**:不正确的 ORDER BY 用法可能导致索引失效。确保 ORDER BY 的列与 WHERE 子句中的索引字段匹配。 7. **全表扫描与索引**:在某些情况下,全表扫描可能比使用索引更快。这通常发生在数据量...

    高手详解SQL性能优化十条经验

    10. **合理使用GROUP BY和ORDER BY**:GROUP BY和ORDER BY操作会增加处理时间,尽量减少排序的列数,或者在WHERE子句中先过滤数据,减少排序的行数。 以上是SQL性能优化的十条核心经验,实践中还需要结合数据库的...

    【MySQL】经验:索引使用场景

    一、适合用索引的场景 ...这里要注意,order by的字段出现在where条件中才能使用索引,否则索引失效。 5、查询中的统计、分组字段 group by和union也属于需要排序的操作,这里也要注意字段出现在whe

    荐Sql server一些常见性能问题的解决方法

    可以通过在`WHERE`和`ORDER BY`涉及的列上创建索引来减少扫描次数。 2. **避免`NULL`值判断**:在`WHERE`子句中直接对字段进行`NULL`值判断会放弃使用索引。为字段设置默认值并用等于操作符查询可以改善性能。 3. **...

    sql调优的方法大全.pdf

    创建索引:在经常用于查询条件的列上创建索引,如WHERE子句、ORDER BY子句涉及的列。但注意索引不宜过多,一般不超过6个,以免降低INSERT和UPDATE操作的效率。 使用复合索引:当查询条件涉及多个列时,可以考虑...

    SQL百万级数据库优化大全

    例如,在`WHERE`子句和`ORDER BY`子句中使用的字段上创建索引可以显著提高查询效率。 - **案例**:假设有一个表`t`,其中包含大量记录,如果执行如下查询:`SELECT * FROM t WHERE num IS NULL`,由于`NULL`值的存在...

    数据库优化

    - **避免全表扫描**:尽可能避免在WHERE子句中使用`ORDER BY`与`LIMIT`组合,这可能会导致全表扫描。例如,在`SELECT id FROM t WHERE num IS NULL ORDER BY num LIMIT 10;`这样的查询中,`num IS NULL`可能导致索引...

    Oracle 开发经验

    - **原理**:索引能够加速数据的查找过程,尤其是在WHERE子句和ORDER BY子句中使用的列。 - **实践**:例如,在查询`SELECT * FROM table WHERE column = value ORDER BY another_column;`时,如果在`column`和`...

    SQL语句优化总结

    DISTINCT、UNION、MINUS、INTERSECT、ORDER BY等操作会引起SQL引擎执行耗资源的排序操作。适当调整SORT_AREA_SIZE参数可能有助于执行这些操作,但在多数情况下应尽量避免或者寻找替代方案。 5. 索引的合理使用 合适...

    oracle中sql语句的数据优化[参考].pdf

    8. **ORDER BY语句的优化**:非索引列的ORDER BY可能导致性能下降,应创建相应索引,同时避免在ORDER BY中使用复杂表达式。 9. **SQL语句的共享**:确保相同SQL语句的查询字符串完全一致,利用SGA共享池,减少解析...

    SQL优化总结

    对于 `SELECT [column1], [column2], … FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort] LIMIT [offset], [LIMIT];` 这样的SQL语句,建立 `(columnX, sort)` 的联合索引能够更加高效地执行查询。 - **...

    sql优化,大数据量如何解决.docx

    避免使用DISTINCT,UNION,MINUS,INTERSECT,ORDER BY等耗费资源的SQL语句。 10. 自动选择索引 如果表中有两个以上(包括两个)索引,其中有一个唯一性索引,可以自动选择索引以提高查询效率。 通过使用这些SQL优化...

    SQL语句优化技术分析

    3. **合理排序**:如果使用了ORDER BY语句,确保对所有子查询都进行相同的排序操作,这样可以避免不必要的额外排序过程。 #### 三、IN操作符优化 IN操作符允许在一个列表中指定多个值,用于匹配单个列中的值。虽然...

    MySQL性能优化的最佳20条经验.odt1

    9. **优化GROUP BY和ORDER BY**:确保GROUP BY和ORDER BY的字段都有索引,以加快分组和排序过程。 10. **避免在索引列上使用计算**:在索引列上进行计算会导致MySQL无法使用该索引,所以应该避免在WHERE子句中这样...

Global site tag (gtag.js) - Google Analytics