select app_id from t_instal where user_id = ? and app_id is not null order by id desc limit 1;
在mysql下执行没有问题,可以得到预期结果。但是用jdbc执行的时候就得不到预期结果了。不知道是不是sql解析的问题。网上找到同样的问题,记录如下
写道
官网地址:http://bugs.mysql.com/bug.php?id=32933
以下转载:http://bbs.chinaunix.net/thread-1276235-1-1.html
我的SQL很简单
我想从一个表中检索所有标题含有“中国”的数据,将它们按id排序,取前5条,所以我写了以下语句
SQL语句1:
select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc
limit 5
当我只使用order by时,能够返回13条结果
只使用limit时,能够返回其中的5条结果
但是当我同时使用order by和limit时,却返回0条结果
同时我们还发现,这种情况并不是在所有检索词上都会出现,如把检索词由“中国”换为“足球”等就不会出现这种现象。
在和同事的讨论中,有人提出了以下方法
SQL语句2:
select * from
(select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc ) a
limit 5
语句2能够正确的得到5条结果
这给了我们一些启发:语句1和语句2的执行并不相同,所以语句1很可能与我们最初设想不符,所以,我们对语句1进行了以下修改
limit 5 ---> limit 50000
得到SQL语句3:
select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc
limit 50000
此SQL语句能够正确得到13条结果
由此我们推测:在同时使用order by和limit时,MySQL进行了某些优化,将语句执行逻辑从"where——order by——limit"变成了"order by——limit——where",导致在某些情况下,同时使用order by和limit会导致查无结果(或结果数量不足)。具体出现问题与否是与表中数据有关的。
以下转载:http://bbs.chinaunix.net/thread-1276235-1-1.html
我的SQL很简单
我想从一个表中检索所有标题含有“中国”的数据,将它们按id排序,取前5条,所以我写了以下语句
SQL语句1:
select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc
limit 5
当我只使用order by时,能够返回13条结果
只使用limit时,能够返回其中的5条结果
但是当我同时使用order by和limit时,却返回0条结果
同时我们还发现,这种情况并不是在所有检索词上都会出现,如把检索词由“中国”换为“足球”等就不会出现这种现象。
在和同事的讨论中,有人提出了以下方法
SQL语句2:
select * from
(select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc ) a
limit 5
语句2能够正确的得到5条结果
这给了我们一些启发:语句1和语句2的执行并不相同,所以语句1很可能与我们最初设想不符,所以,我们对语句1进行了以下修改
limit 5 ---> limit 50000
得到SQL语句3:
select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc
limit 50000
此SQL语句能够正确得到13条结果
由此我们推测:在同时使用order by和limit时,MySQL进行了某些优化,将语句执行逻辑从"where——order by——limit"变成了"order by——limit——where",导致在某些情况下,同时使用order by和limit会导致查无结果(或结果数量不足)。具体出现问题与否是与表中数据有关的。
看来order by和limit共用会有问题的,但是这只会在某些特殊情况下,使用的时候还是要考虑到这个会导致的bug的。
相关推荐
mysql order by limit 的一个坑.docx
activiti5.9修复mysql order by 排序bug 详情见博客地址:http://blog.csdn.net/qq413041153/article/details/7740773#comments
排序查询(order by) 电商中:我们想查看今天所有成交的订单,按照交易额从高到低排序,此时我们可以使用数据库中的排序功能来完成。 排序语法: select 字段名 from 表名 order by 字段1 [asc|desc],字段2 [asc...
MySQL中union和order by是可以一起使用的,但是在使用中需要注意一些小问题,下面通过例子来说明。首先看下面的t1表。 1、如果直接用如下sql语句是会报错:Incorrect usage of UNION and ORDER BY。 SELECT * FROM ...
mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...
因此,常常出现这样的错误 代码如下:select * from [IND] where INDID>10unionselect * from [IND] where INDID<9>10 order by INDID descunionselect * from [IND] where ...难道UNION和ORDER BY 不能同时存在? union
–按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...
两张表连接查询并limit,SQL效率很高,但是加上order by以后,语句的执行时间变的巨长,效率巨低,接下来为大家介绍下连接查询排序limit
在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序
假设有一个表:reward(奖励表),表结构如下: CREATE TABLE test.reward ( id int(11) NOT NULL AUTO_INCREMENT, uid int(11) NOT NULL COMMENT '用户uid', money decimal(10, 2) NOT NULL COMMENT '奖励金额'...
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是... 您可能感兴趣的文章:sql中 order by 和 group by的区别深度分析mysql GROUP BY 与 ORDER BYgroup by,having,o
本PDF文档是作为萌狼蓝天CSDN萌狼蓝天-MySQL专栏-的补充 因为文档的图片上传失败了没有图片,所以需要看图的可以下载本附件
mysql中order by 排序查询、asc升序、desc降序,group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。
Mysql的分页的两个参数 select * from user limit 1,2 ... 您可能感兴趣的文章:详解MySQL的limit用法和分页查询语句的性能分析MYSQL分页limit速度太慢的优化方法mysql limit分页优化方法分享Mysql limit
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下 明显。这不是我想...
之前在w3s网站上看到ORDER BY的用法,以为是对选出来的数据按关键字升序或者降序排列,结果今天尝试select数据集数据的时候,发现使用ORDER BY 和ORDER BY DESC得出的查询结果完全不一样,按照自己之前的理解它们...
Bugfree测试平台搭建 打开php.ini,查找index.html,在后面添加上index.htm index.php
如果DELETE语句包括一个ORDER BY子句,则各行按照子句中指定的顺序进行删除。此子句只在与LIMIT联用是才起作用。例如,以下子句用于查找与WHERE子句对应的行,使用timestamp_column进行分类,并删除第一(最旧的)行...
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机抽取实现方法
关于Mysql分页的两种方法,一种假分页,没有效率提高,另一种使用limit,对数据量小的情况下效率会高点