Mysql子查詢IN中使用LIMIT應用示例
更新時間:2014年01月24日 17:18:29 作者:
有3張表,infor信息表,mconfig物料配置表,maaply物料申請表,要求是讀出申請表中哪些人申請哪些物料,接下來為大家介紹下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了,但是運行后發(fā)現,數據有問題
和單純的讀出申請表的內容不一樣,才發(fā)現LIMIT的位置放錯了,于是又把LIMIT發(fā)在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`
)
運行后,問題解決~~~
需求是這樣的,我有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了,但是運行后發(fā)現,數據有問題
和單純的讀出申請表的內容不一樣,才發(fā)現LIMIT的位置放錯了,于是又把LIMIT發(fā)在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之key和index的區(qū)別及創(chuàng)建刪除索引方式
這篇文章主要介紹了mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12JDK1.7下測試ConnectorJ連接MySQL8.0的方法
MySQL?Connector/J是一個JDBC?4型驅動程序。Type?4標志意味著驅動程序是MySQL協議的純Java實現,不依賴于MySQL客戶端庫,這篇文章主要介紹了JDK1.7下測試ConnectorJ連接MySQL8.0,需要的朋友可以參考下2022-10-10MySQL中實現高性能高并發(fā)計數器方案(例如文章點擊數)
這篇文章主要介紹了MySQL中實現高性能高并發(fā)計數器方案,本文中的計數器是指如文章的點擊數、喜歡數、瀏覽次數等,需要的朋友可以參考下2014-10-10MySQL+Redis緩存+Gearman共同構建數據庫緩存的方法
這篇文章主要介紹了MySQL+Redis緩存+Gearman共同構建數據庫緩存,部署后在MySQL端進行創(chuàng)建一個用戶給與遠程登錄權限,使得Redis作為緩存可以用來同步數據使用,需要的朋友可以參考下2022-10-10