您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何解決mysql in條件語句只讀取一條信息的問題”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何解決mysql in條件語句只讀取一條信息的問題”這篇文章吧。
在編寫MYSQL查詢語句時(shí)遇到一個(gè)很奇怪的問題,使用mysql多表查詢,一個(gè)表中的某個(gè)字段作為另一表的in查詢條件,只能讀取一條信息,而直接用數(shù)字的話可以正常讀取
SQL語句如下:
select a.id,a.title,b.idlist,b.aid from table a,table2 b where a.id in(b.idlist) and b.aid=2
table2表中的idlist字段是varchar類型,保存table表中的多個(gè)id信息即
1,2,3,4
用上面的語句可以正常查詢但只能查詢到一條信息但是用下面的語句的話卻可以正常讀取
select a.id,a.title,b.idlist,b.aid from table a,table2 b where a.id in(1,2,3,4) and b.aid=2
很奇怪的問題,開始以為是數(shù)據(jù)類型的問題,但要保存成1,2,3,4
這種格式的數(shù)據(jù)只能用字符類型,想了很多辦法都沒有解決問題,直到查到MYSQL中的FIND_IN_SET()函數(shù),下面是關(guān)于FIND_IN_SET()函數(shù)的基本介紹說明
語法:FIND_IN_SET(str,strlist)
定義:
1. 假如字符串str在由N子鏈組成的字符串列表strlist中,則返回值的范圍在1到N之間。
2. 一個(gè)字符串列表就是一個(gè)由一些被‘,'符號(hào)分開的自鏈組成的字符串。
3. 如果第一個(gè)參數(shù)是一個(gè)常數(shù)字符串,而第二個(gè)是typeSET列,則FIND_IN_SET()函數(shù)被優(yōu)化,使用比特計(jì)算。
4. 如果str不在strlist或strlist為空字符串,則返回值為0。
5. 如任意一個(gè)參數(shù)為NULL,則返回值為NULL。這個(gè)函數(shù)在第一個(gè)參數(shù)包含一個(gè)逗號(hào)(‘,')時(shí)將無法正常運(yùn)行。
strlist:一個(gè)由英文逗號(hào)“,”鏈接的字符串,例如:"a,b,c,d",該字符串形式上類似于SET類型的值被逗號(hào)給鏈接起來。
示例:SELECT FIND_IN_SET('b','a,b,c,d'); //返回值為2,即第2個(gè)值
好了,先試試能不能用,把原SQL語句修改成
select a.id,a.title,b.idlist,b.aid from table a,table2 b where FIND_IN_SET(a.id,b.idlist) and b.aid=2
執(zhí)行一下修改后的語句,終于可以正常讀取了,分析一下原因,最終還是因?yàn)閿?shù)據(jù)類型的問題,我們直接in(b.idlist)時(shí),讀取的b.idlist是字符類型,而in只接受數(shù)字,雖說都帶有“,”號(hào)但實(shí)際上是完全不同的.
以上是“如何解決mysql in條件語句只讀取一條信息的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。