一、问题描述  三表联合查询  按主表的时间倒叙并分页

下面sql语句 ORDER BY失效 ,如果把 ORDER BY  放在最后 比如有20条数据 第一页会是10 -1 第二页是20-11  分页不正确

查询资料发现:在mysql5.7中,如果不加limit,系统会把order by优化掉。

在mysql5.7手册的8.2.2.1中有解释:

子查询的优化是使用半连接的策略完成的(The optimizer uses semi-join strategies to improve subquery execution)

使用半连接进行优化,子查询语句必须满足一些标准(In MySQL, a subquery must satisfy these criteria to be handledas a semi-join)。

其中一个标准是:必须不是一个包含了limit和order by的语句(It must not have ORDER BY with LIMIT.)

解决方法一:子查询里外都排序

解决方法二:在嵌入一个子查询(好像也是里外都排序)

SELECT * FROM (

SELECT * FROM (

SELECT * FROM zs_safe_confess B WHERE B.ENABLE = 1 ORDER BY B.CREATE_TIME DESC, B.UPDATE_TIME DESC LIMIT 0,10) A

LEFT JOIN zs_safe_confess_content C ON A.ID = C.CSAFE_ID)D

LEFT JOIN zs_resources ON D.ID = zs_resources.ID AND zs_resources.TYPE = 10 AND zs_resources.ENABLE = 1

ORDER BY D.CREATE_TIME DESC, D.UPDATE_TIME DESC

SELECT A.*,

zs_safe_confess_content.CID,

zs_safe_confess_content.CSAFE_ID,

zs_safe_confess_content.CSTATUS,

zs_safe_confess_content.CCONTENT,

zs_safe_confess_content.CCHECK_RESULT,

zs_safe_confess_content.CCREATE_TIME,

zs_safe_confess_content.CUPDATE_TIME,

zs_safe_confess_content.CUSER_ID,

zs_safe_confess_content.CUSER_NAME,

zs_safe_confess_content.CENABLE,

zs_safe_confess_content.CBACKUP_01,

zs_safe_confess_content.CBACKUP_02,

zs_safe_confess_content.CBACKUP_03,

zs_resources.RID AS RID,

zs_resources.ID AS ID,

zs_resources.TYPE AS RTYPE,

zs_resources.URL AS RURL,

zs_resources.RESOURCE_CODE AS RRESOURCE_CODE,

zs_resources.FILE_NAME AS RFILE_NAME,

zs_resources.FILE_SIZE AS RFILE_SIZE,

zs_resources.CREATOR AS RCREATOR,

zs_resources.CREATETIME AS RCREATETIME,

zs_resources.MODIFIER AS RMODIFIER,

zs_resources.UPDATETIME AS RUPDATETIME,

zs_resources.ENABLE AS RENABLE FROM (

SELECT

zs_safe_confess.ID,

zs_safe_confess.SAFE_NAME, zs_safe_confess.DEPT_NAME,

zs_safe_confess.DEPT_ID, zs_safe_confess.PROJECT_NAME,

zs_safe_confess.PROJECT_NUMBER,

zs_safe_confess.PROJECT_PERSON,

zs_safe_confess.WORK_ADDRESS, zs_safe_confess.WORK_NUMBER,

zs_safe_confess.COMPANY_PERSON, zs_safe_confess.COMPANY_PHONE,

zs_safe_confess.FACTORY_PERSON,

zs_safe_confess.FACTORY_PHONE,

zs_safe_confess.DANGER_DISCERN, zs_safe_confess.ENVIRONMENT_DISCREN,

zs_safe_confess.DANGER_MEASURES,zs_safe_confess.ENVIRONMENT_MEASURES,

zs_safe_confess.DANGER_MANAGER, zs_safe_confess.MANAGER_TIME,

zs_safe_confess.SCENE_COMFIRM, zs_safe_confess.SCENE_COMFIRM_TIME,

zs_safe_confess.COMFIRM_CHECK_PERSON,

zs_safe_confess.COMFIRM_CHECK_TIME,

zs_safe_confess.TEST_BEFORE_PERSON, zs_safe_confess.TEST_BEFORE_TIME,

zs_safe_confess.TEST_PERSON,

zs_safe_confess.TEST_TIME,

zs_safe_confess.TEST_AFTER_PERSON,zs_safe_confess.TEST_AFTER_TIME,zs_safe_confess.STATUS,zs_safe_confess.TYPE

,zs_safe_confess.CREATE_TIME,zs_safe_confess.UPDATE_TIME,zs_safe_confess.USER_ID,zs_safe_confess.USER_NAME,zs_safe_confess.ENABLE

,zs_safe_confess.BACKUP_01,zs_safe_confess.BACKUP_02,zs_safe_confess.BACKUP_03

FROM zs_safe_confess WHERE zs_safe_confess.ENABLE = 1 ORDER BY CREATE_TIME DESC, UPDATE_TIME DESC LIMIT 0,10) A

LEFT JOIN zs_safe_confess_content ON A.ID = zs_safe_confess_content.CSAFE_ID

LEFT JOIN zs_resources ON A.ID = zs_resources.ID AND zs_resources.TYPE = 10 AND zs_resources.ENABLE = 1 (ORDER BY A.CREATE_TIME DESC, A.UPDATE_TIME DESC)(这是解决方法一)

mysql order by子查询_sql子查询 order by失效问题相关推荐

  1. mysql三重连接查询_sql子查询,多重查询,join,左连接,右连接,内连接

    范围内重复数量查询 根据上表查询 每个手机号都各有多少个重复的设备id SELECT t.phone_num,COUNT(*) FROM (select phone_num, device_id,co ...

  2. sql 子查询 嵌套查询_SQL子查询– SQL中的嵌套查询

    sql 子查询 嵌套查询 In the real world, there are times when we need a particular set of data but we don't h ...

  3. stotybord如何添加子视图_SQL复杂查询-子查询

    视图: 1.视图的概念引入: SQL数据库里面存放的是SQL语句,视图中查看到的SQL查询语句,当我们运用客户端连接到视图时候,视图会运行里面的查询语句,从库中查找出数据,保存在临时表里面.当客户端和 ...

  4. sql镶嵌查询_SQL数据查询之——嵌套查询

    一.概念描述 在SQL语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块.将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中的查询称为 嵌套查询.例如: ...

  5. java高级查询_SQL高级查询(转载)

    transact---sql高级查询(下) 5:使用having关键字来筛选结果 6:使用compute和compute by子句 7:使用嵌套查询 8:分布式查询 E:使用having关键字来筛选结 ...

  6. sql镶嵌查询_SQL 嵌套查询

    说到嵌套查询,首先得理解嵌套查询是什么意思,简单来说就是,一个查询语句可以嵌套在另外一个查询语句的where子句中.外层的查询称为父查询(主查询),内层的查询称为子查询(从查询). 嵌套查询的工作方式 ...

  7. clob和blob是不是可以进行模糊查询_SQL简单查询语、运算符学习和练习

    本次主要学习了SQL语言的书写和运算,多为实操,一定要多写多思考,综合运用起来. 基本查询语句(select *全部 as替换 distinct删除重复) 指定查询条件(where 从哪里查询) 注释 ...

  8. sql在插入语句使用子查询_SQL插入查询

    sql在插入语句使用子查询 SQL INSERT Query also referred as SQL INSERT INTO is the command used for inserting da ...

  9. mysql 层次化查询_SQL高级查询(层次化查询,递归)

    SQL 高级查询 层次化查询 层次化结构可以理解为树状数据结构,由节点构成.比如常见的组织结构由一个总经理,多个副总经理,多个部门部长组成.再比如在生产制造中一件产品会有多个子零件组成.举个简单的例子 ...

最新文章

  1. 面向对象【day08】:类的特殊成员(一)
  2. GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!
  3. cat卡特鞋有实体店吗_保养课堂 | 小小密封件,竟然是CAT油缸和连杆耐用的秘密...
  4. HDU4008 Parent and son [树形DP]
  5. HTTP Error 503. The service is unavailable.
  6. Leetcode 62. Unique Paths
  7. C#.net删除dataGridView中选中行并同时更新数据库
  8. 用计算机玩游戏最简单的方法,如何制作电脑简易命令小游戏
  9. C++项目开发注意事项--持续更新
  10. Leetcode669.Trim a Binary Search Tree修建二叉树
  11. 锤子发布会2018的四个环节概述
  12. 联想计算机无法启动怎么办,联想电脑打不开机怎么办
  13. JRE和JDK的区别
  14. java毕业设计——基于java+Java3D的网络三维技术设计与实现(毕业论文+程序源码)——三维技术
  15. matlab 股票分时图_matlab画股票走势图 急急急!
  16. localStorage数据丢失
  17. 软件测试工程师这个岗位职责是什么?具体都需要干什么?
  18. 抽签小程序(C语言随机数),随机数生成器
  19. 心理服务机构运营成本太高?《心理服务OA系统》来解决!
  20. 关于VoltDB--全球最快的分布式内存数据库

热门文章

  1. php 存储过程 sqlsrv_query,php-PHP如何得用sqlsrv函数来调用MSSQL中的存储过程,并返回数据集?...
  2. Java是先难后易吗_学软件应该“先难后易”还是“先易后难”?
  3. 别乱用,这样打日志定位 Bug 又快又准!
  4. Java中的垃圾回收原理
  5. oracle中命令,oracle中常用命令汇总(一)
  6. java中junit用法,JUnit基本用法
  7. JVM内存分配策略原
  8. 团队第一阶段冲刺——第九天
  9. 13、字符设备驱动的使用
  10. 在工作中常用的sql语句