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

2022-11-12 09:35:14
内容摘要
这篇文章主要为大家详细介绍了MySQL子查询IN中使用LIMIT应用示例,具有一定的参考价值,可以用来参考一下。 对此感兴趣的朋友,看看idc笔记做的技术笔记!这两天项目里出了一个问
文章正文

这篇文章主要为大家详细介绍了MySQL子查询IN中使用LIMIT应用示例,具有一定的参考价值,可以用来参考一下。

对此感兴趣的朋友,看看idc笔记做的技术笔记!

这两天项目里出了一个问题,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` 
) 
运行后,问题解决~~~

注:关于MySQL子查询IN中使用LIMIT应用示例的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!