服务器之家

服务器之家 > 正文

Mysql子查询IN中使用LIMIT应用示例

时间:2020-03-11 16:17     来源/作者: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 

<pre name="code" class="sql">LIMIT 0,10</pre> 


这样没有报错,莫离以为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` 


运行后,问题解决~~~

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部