教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 Mysql子查询IN中使用LIMIT

Mysql子查询IN中使用LIMIT

发布时间:2016-03-30   编辑:jiaochengji.com
在mysql的子查询in中使用limit的用法,学习下 mysql limit的用法,有需要的朋友参考下。

本节内容:
学习mysql子查询IN中LIMIT的用法。

项目中遇到的问题:mysql limit使用后报错。

需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料申请表,要求是读出申请表中哪些人申请哪些物料

首先,这样:
 

复制代码 代码示例:
SELECT infor.name,infor.phone,infor.add,
mconfig.mname,mapply.acount,from_unixtime(mapply.atime,'%Y-%m-%d') as 'atime'
FROM mapply right JOIN infor ON mapply.uid = infor.uid inner JOIN mconfig ON mapply.mid = mconfig.mid
WHERE mapply.aid
IN (
SELECT aid
FROM `mapply` where state = $state
ORDER BY `atime` , `uid` DESC
LIMIT 0,10
)

结果报错了。当时没注意报的什么错误,只是看到LIMIT什么的错误,于是修改代码:
 

复制代码 代码示例:
SELECT infor.name,infor.phone,infor.add,
mconfig.mname,mapply.acount,from_unixtime(mapply.atime,'%Y-%m-%d') as 'atime'
FROM mapply right JOIN infor ON mapply.uid = infor.uid inner JOIN mconfig ON mapply.mid = mconfig.mid
WHERE mapply.aid
IN (
SELECT aid
FROM `mapply` where state = $state
ORDER BY `atime` , `uid` DESC
)
LIMIT 0,10

这样没有报错,以为OK了,但是运行后发现,数据有问题

和单纯的读出申请表的内容不一样,才发现LIMIT的位置放错了,于是又把LIMIT发在IN里,结果报错:
This version of MySQL doesn't yet support ‘LIMIT & IN/ALL/ANY/SOME subquery'

细看才知道,IN里不支持LIMIT。如何解决呢?

在IN里再使用一张临时表,把需要的内容先查出来,修改后的代码:
 

复制代码 代码示例:
SELECT infor.name,infor.phone,infor.add,
mconfig.mname,mapply.acount,from_unixtime(mapply.atime,'%Y-%m-%d') as 'atime'
FROM mapply right JOIN infor ON mapply.uid = infor.uid inner JOIN mconfig ON mapply.mid = mconfig.mid
WHERE mapply.aid
IN (
SELECT aid
FROM (SELECT `aid` FROM `mapply` where state = $state
ORDER BY `atime` , `uid` DESC
LIMIT 0,10)AS `tp`
)

您可能感兴趣的文章:
学习MySQL数据分页查询(limit用法)
Mysql子查询IN中使用LIMIT
Mysql中limit的用法实例详解
优化mysql的limit offset的例子
mysql中limit、order by和group by的用法实例解析
mysql分页limit优化方法
MySQL limit查询优化的实例详解
学习mysql中的limit分页优化
mysql 分页查询的sql语句
实例详解mysql limit大数据量分页优化的方法

关键词: mysql limit  mysql子查询   
[关闭]
~ ~