在SQL标准中,子查询中的order by是不生效的 MySQL 5.7由于在这个点上遵循了SQL标准导致问题暴露,而在MySQL 5.6/8.0中这种写法依然是生效的 参考文档 https://stackoverflow.com/questions/26372511/mysql-mariadb-order-by-inside-subquery https://mariadb.com/kb/en/why-is-order-by-in-a-from-subquery-ignor...
select * from (select * from atable order by id asc limit 0,999999999) 没有limit 排序不会生效
正确应该是,在 group by的时候同时使用 order by,即可生效,如下: SELECT tRecord.business_no FROM ( SELECT business_no, call_time FROM call_record WHERE business_type = 1 ORDER BY call_time DESC LIMIT 20000 ) tRecord GROUP BY tRecord.business_no ORDER BY tRecord.call_time DESC...
select * from (SELECT * FROM article WHERE is_top=0 ORDER BY id DESC) as t1 union select * from (SELECT * FROM article WHERE is_top=1 ORDER BY start_time desc) as t2 然后还是发现子查询的排序无效,尴尬,后来才发现如果order by 不带limit,会被优化器干掉,导致语句就是: select * from (...
在区域A的MySQL实例上,查询商品最新修改时间可以得到正确结果,但是在区域B的MySQL实例上,得到的修改时间并不是最新的,而是最老的。通过对语句进行简化,发现是子查询中的order by created_at desc语句在区域B的实例上没有生效。 排查过程 难道区域会影响MySQL的行为?经过DBA排查,区域A的MySQL是5.6版,区域B的MySQL是...
问题的原因清晰了,原来SQL标准中,table的定义是一个未排序的数据集合,而一个SQL子查询是一个临时的table,根据这个定义,子查询中的order by会被忽略。同时,官方回复也给出了解决方案:将子查询的order by移动到最外层的select语句中。 总结 在SQL标准中,子查询中的order by是不生效的 MySQL 5.7由于在这个点上遵循...
MySQL⼦查询中orderby不⽣效问题的解决⽅法 ⼀个偶然的机会,发现⼀条SQL语句在不同的MySQL实例上执⾏得到了不同的结果。问题描述 创建商品表product_tbl和商品操作记录表product_operation_tbl两个表,来模拟下业务场景,结构和数据如下:接下来需要查询所有商品最新的修改时间,使⽤如下语句:select t1....
mysql 5.7.15 union order by 子查询排序不生效,其实这么写理论上是对的,很多博客教程都是这样子写的。。select*from(SELECT*FROMarticleWHEREis_top=0ORDERBYidDESC)ast1unionselect*from(SELECT*FROMarticleWHEREis_top=1ORDERBYstart_timedesc)ast2然后还是发
MySQL子查询中order by不生效问题的解决方法 一个偶然的机会,发现一条SQL语句在不同的MySQL实例上执行得到了不同的结果。 问题描述 创建商品表product_tbl和商品操作记录表product_operation_tbl两个表,来模拟下业务场景,结构和数据如下: 接下来需要查询所有商品最新的修改时间,使用如下语句:...