mysql用in报错_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
)
LIMIT 0,10這樣沒有報錯,莫離以為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`
)
運行后,問題解決!
總結
以上是生活随笔為你收集整理的mysql用in报错_Mysql子查询IN中使用LIMIT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 割双眼皮痕迹怎么消除
- 下一篇: 半口吸附性义齿好吗