Mysql子查詢IN中使用LIMIT應(yīng)用示例
更新時(shí)間:2014年01月24日 17:18:29 作者:
有3張表,infor信息表,mconfig物料配置表,maaply物料申請(qǐng)表,要求是讀出申請(qǐng)表中哪些人申請(qǐng)哪些物料,接下來為大家介紹下Mysql子查詢IN中使用LIMIT
這兩天項(xiàng)目里出了一個(gè)問題,LIMIT使用后報(bào)錯(cuò)。
需求是這樣的,我有3張表,infor信息表,mconfig物料配置表,maaply物料申請(qǐng)表,要求是讀出申請(qǐng)表中哪些人申請(qǐng)哪些物料
于是我先是這樣寫的:
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
)
結(jié)果報(bào)錯(cuò)了
當(dāng)時(shí)沒注意報(bào)的什么錯(cuò)誤,只是看到LIMIT什么的錯(cuò)誤,于是改了下代碼
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>
這樣沒有報(bào)錯(cuò),莫離以為OK了,但是運(yùn)行后發(fā)現(xiàn),數(shù)據(jù)有問題
和單純的讀出申請(qǐng)表的內(nèi)容不一樣,才發(fā)現(xiàn)LIMIT的位置放錯(cuò)了,于是又把LIMIT發(fā)在IN里,結(jié)果報(bào)錯(cuò)如下
This version of MySQL doesn't yet support ‘LIMIT & IN/ALL/ANY/SOME subquery'
細(xì)看才知道,IN里不支持LIMIT。那怎么辦呢?
于是度娘后得知,在IN里再使用一張臨時(shí)表,把需要的內(nèi)容先查出來,
修改后代碼如下:
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`
)
運(yùn)行后,問題解決~~~
需求是這樣的,我有3張表,infor信息表,mconfig物料配置表,maaply物料申請(qǐng)表,要求是讀出申請(qǐng)表中哪些人申請(qǐng)哪些物料
于是我先是這樣寫的:
復(fù)制代碼 代碼如下:
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
)
結(jié)果報(bào)錯(cuò)了
當(dāng)時(shí)沒注意報(bào)的什么錯(cuò)誤,只是看到LIMIT什么的錯(cuò)誤,于是改了下代碼
復(fù)制代碼 代碼如下:
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>
這樣沒有報(bào)錯(cuò),莫離以為OK了,但是運(yùn)行后發(fā)現(xiàn),數(shù)據(jù)有問題
和單純的讀出申請(qǐng)表的內(nèi)容不一樣,才發(fā)現(xiàn)LIMIT的位置放錯(cuò)了,于是又把LIMIT發(fā)在IN里,結(jié)果報(bào)錯(cuò)如下
This version of MySQL doesn't yet support ‘LIMIT & IN/ALL/ANY/SOME subquery'
細(xì)看才知道,IN里不支持LIMIT。那怎么辦呢?
于是度娘后得知,在IN里再使用一張臨時(shí)表,把需要的內(nèi)容先查出來,
修改后代碼如下:
復(fù)制代碼 代碼如下:
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`
)
運(yùn)行后,問題解決~~~
相關(guān)文章
SQL算術(shù)運(yùn)算符之加法、減法、乘法、除法和取模的用法例子
算術(shù)運(yùn)算符主要用于數(shù)學(xué)運(yùn)算,其可以連接運(yùn)算符前后的兩個(gè)數(shù)值或表達(dá)式,對(duì)數(shù)值或表達(dá)式進(jìn)行加(+)、減(-)、乘(*)、除(/)和取模(%)運(yùn)算,下面這篇文章主要給大家介紹了關(guān)于SQL算術(shù)運(yùn)算符之加法、減法、乘法、除法和取模用法的相關(guān)資料,需要的朋友可以參考下2024-03-03mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式
這篇文章主要介紹了mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12MySQL數(shù)據(jù)庫備份和還原的常用命令小結(jié)
MySQL數(shù)據(jù)庫備份和還原的常用命令小結(jié),學(xué)習(xí)mysql的朋友可以參考下2012-03-03MySQL MHA 運(yùn)行狀態(tài)監(jiān)控介紹
這篇文章主要介紹MySQL MHA 運(yùn)行狀態(tài)監(jiān)控,MHA(Master HA)是一款開源的 MySQL 的高可用程序,它為 MySQL 主從復(fù)制架構(gòu)提供了 automating master failover 功能,想具體了解的小伙伴可以和小編一起學(xué)習(xí)下面文章內(nèi)容2021-10-10JDK1.7下測試ConnectorJ連接MySQL8.0的方法
MySQL?Connector/J是一個(gè)JDBC?4型驅(qū)動(dòng)程序。Type?4標(biāo)志意味著驅(qū)動(dòng)程序是MySQL協(xié)議的純Java實(shí)現(xiàn),不依賴于MySQL客戶端庫,這篇文章主要介紹了JDK1.7下測試ConnectorJ連接MySQL8.0,需要的朋友可以參考下2022-10-10MySQL中實(shí)現(xiàn)高性能高并發(fā)計(jì)數(shù)器方案(例如文章點(diǎn)擊數(shù))
這篇文章主要介紹了MySQL中實(shí)現(xiàn)高性能高并發(fā)計(jì)數(shù)器方案,本文中的計(jì)數(shù)器是指如文章的點(diǎn)擊數(shù)、喜歡數(shù)、瀏覽次數(shù)等,需要的朋友可以參考下2014-10-10MySQL+Redis緩存+Gearman共同構(gòu)建數(shù)據(jù)庫緩存的方法
這篇文章主要介紹了MySQL+Redis緩存+Gearman共同構(gòu)建數(shù)據(jù)庫緩存,部署后在MySQL端進(jìn)行創(chuàng)建一個(gè)用戶給與遠(yuǎn)程登錄權(quán)限,使得Redis作為緩存可以用來同步數(shù)據(jù)使用,需要的朋友可以參考下2022-10-10