zoukankan      html  css  js  c++  java
  • Mysql子查询IN中使用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
    ) www.jbxue.com

    结果报错了

    当时没注意报的什么错误,只是看到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。那怎么办呢?www.jbxue.com

    于是度娘后得知,在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`
    )
    运行后,问题解决!

  • 相关阅读:
    Java设置环境变量
    php 生成二维码
    php 生成读取csv文件并解决中文乱码
    php 过滤重复的数组
    php 读取,生成excel文件
    php 逐行读取文本文件
    php 多维数组按键值分类
    python学习,day2:利用列表做购物车实例
    python学习,day1作业:设计一个三级菜单
    python学习,day2:字典
  • 原文地址:https://www.cnblogs.com/cfinder010/p/3532898.html
Copyright © 2011-2022 走看看