完美解決mysql in條件語句只讀取一條信息問題的2種方案
今天同事在編寫MYSQL查詢語句時遇到一個很奇怪的問題,使用mysql多表查詢,一個表中的某個字段作為另一表的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表中的多個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ù),下面是關于FIND_IN_SET()函數(shù)的基本介紹說明
語法:FIND_IN_SET(str,strlist)
定義:
1. 假如字符串str在由N子鏈組成的字符串列表strlist中,則返回值的范圍在1到N之間。
2. 一個字符串列表就是一個由一些被‘,'符號分開的自鏈組成的字符串。
3. 如果第一個參數(shù)是一個常數(shù)字符串,而第二個是typeSET列,則FIND_IN_SET()函數(shù)被優(yōu)化,使用比特計算。
4. 如果str不在strlist或strlist為空字符串,則返回值為0。
5. 如任意一個參數(shù)為NULL,則返回值為NULL。這個函數(shù)在第一個參數(shù)包含一個逗號(‘,')時將無法正常運行。
strlist:一個由英文逗號“,”鏈接的字符串,例如:"a,b,c,d",該字符串形式上類似于SET類型的值被逗號給鏈接起來。
示例:SELECT FIND_IN_SET('b','a,b,c,d'); //返回值為2,即第2個值
好了,先試試能不能用,把原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í)行一下修改后的語句,終于可以正常讀取了,分析一下原因,最終還是因為數(shù)據(jù)類型的問題,我們直接in(b.idlist)時,讀取的b.idlist是字符類型,而in只接受數(shù)字,雖說都帶有“,”號但實際上是完全不同的.
好了問題解決了,如果還想知道更多關于FIND_IN_SET()函數(shù)的使用方法,可以看一下頁面的相關文章
相關文章
mysql啟動時出現(xiàn)ERROR 2003 (HY000)問題的解決方法
這篇文章主要為大家詳細介紹了mysql啟動時出現(xiàn)ERROR 2003 (HY000問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫操作實例
這篇文章主要給大家介紹了關于一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫的相關資料,同一臺服務器裝兩個數(shù)據(jù)庫,可以通過虛擬化技術實現(xiàn),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-03-03利用frm和ibd文件恢復mysql表數(shù)據(jù)的詳細過程
總是遇到mysql服務意外斷開之后導致mysql服務無法正常運行的情況,使用Navicat工具查看能夠看到里面的庫和表,但是無法獲取數(shù)據(jù)記錄,提示數(shù)據(jù)表不存在,所以本文給大家介紹了利用frm和ibd文件恢復mysql表數(shù)據(jù)的詳細過程,需要的朋友可以參考下2024-04-04