Mysql的FIND_IN_SET的使用
背景:查詢參展展會中所有的產(chǎn)品的名稱,參展展會表存儲的產(chǎn)品id product以","分割;
參展展會表
id
name
product(存儲id","分割 例如:1,2,3)
測試數(shù)據(jù):
1 張三 1,2,3
2 李四 2,3
產(chǎn)品表
id
name
測試數(shù)據(jù):
1 液態(tài)食品包裝、灌裝設(shè)備及技術(shù)
2 自動化、控制系統(tǒng)及檢測設(shè)備
3 后段包裝設(shè)備及技術(shù)
4 PET設(shè)備及技術(shù)
查詢思路:
1.現(xiàn)將產(chǎn)品按照id在'1,2,4'集合中查詢出來
SELECT p.name FROM dict_product p WHERE FIND_IN_SET(p.id,'1,2,4')
2.查詢返回的是多個值使用GROUP_CONCAT合成一條
SELECT
e.companyname,
(
SELECT
GROUP_CONCAT(p. NAME)
FROM
dict_product p
WHERE
FIND_IN_SET(p.id, e.product)
) as product
FROM
join_exhibition e
FIND_IN_SET(str,strlist)
MySQL手冊中find_in_set函數(shù)的語法:
FIND_IN_SET(str,strlist)
str 要查詢的字符串
strlist 字段名 參數(shù)以”,”分隔 如 (1,2,6,8)
查詢字段(strlist)中包含(str)的結(jié)果,返回結(jié)果為null或記錄
假如字符串str在由N個子鏈組成的字符串列表strlist 中,則返回值的范圍在 1 到 N 之間。 一個字符串列表就是一個由一些被 ‘,’ 符號分開的子鏈組成的字符串。如果第一個參數(shù)是一個常數(shù)字符串,而第二個是type SET列,則FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計算。 如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數(shù)為NULL,則返回值為 NULL。這個函數(shù)在第一個參數(shù)包含一個逗號(‘,’)時將無法正常運行。