各位用户为了找寻关于Mysql子查询IN中使用LIMIT应用示例的资料费劲了很多周折。这里教程网为您整理了关于Mysql子查询IN中使用LIMIT应用示例的相关资料,仅供查阅,以下为您介绍关于Mysql子查询IN中使用LIMIT应用示例的详细内容

这两天项目里出了一个问题,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`  ) 

运行后,问题解决~~~