UNION ALL 在单个子查询中排序不生效题目

打印 上一主题 下一主题

主题 1012|帖子 1012|积分 3036

业务场景

有两张表:表A,和表B,需要对A中数据按排序字段排序,对B表也按排序字段排序,然后返回并集。
写出如下SQL(已简化):
  1. (select id from A order by sort desc)
  2. union all
  3. (select id from B order by sort desc);
复制代码
初看似乎没什么题目,数据被筛选出来了,且数量正确,但是,排序却没有按照准期的顺序排列。
验证

再次简化上述SQL,只取一张表的数据:
  1. (select id from A order by sort)
  2. union all
  3. (select id from A order by sort desc);
复制代码
预期结果:第一条ID=最后一条ID。
实际结果:两条子查询的sql都按正序排列,排序似乎未生效。
无论是按正序照旧倒叙排,结果总是正序,因此可能是mysql将子查询的order by优化掉了。
查看下优化后的sql(已简化):
  1. (select id from A)
  2. union all
  3. (select id from A);
复制代码
order by已经被移除。以是无论如何排序都是不生效的。
   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表