Mysql 實現split字符串分割
--場景大致如下:有A B兩表,A表中的某一字段bids存放著一個B表主鍵的數組如3,4,5 而這個時候要做關聯查詢的時候,理想情況應該可以這樣做
select b.* from A a,B b where b.id in (a.bids.split(',')) 但是mysql并不支持這樣做,也沒有提供類似的做法,所以很糟糕。 有一種變態的做法就是給bids做一下處理,就是
在bids的前后都加上逗號, 這樣bids就變成,3,4,5, 這個時候利用模糊查詢來做關聯就可以達到目的了,做法如下:
select b.* from A a, B b where CONCAT(CONCAT(',',a.bids),',') LIKE CONCAT(CONCAT('%,',b.id),',%')

當b的id=3時候的查詢相當于執行
select b.* from A a, B b where ',3,4,5,' LIKE '%,3,%'

----真實例子----
SELECT t.*
FROM tea_material_trade t ,tea_process_product p WHERE p.id =2 AND CONCAT(CONCAT(',',p.tradeids),',') LIKE CONCAT(CONCAT('%,',t.id),',%')


--值得注意的是,這樣的效率恐怕比較低,小數據量應該沒有問題,大數據量估計不能這么做


select b.* from A a,B b where b.id in (a.bids.split(',')) 但是mysql并不支持這樣做,也沒有提供類似的做法,所以很糟糕。 有一種變態的做法就是給bids做一下處理,就是
在bids的前后都加上逗號, 這樣bids就變成,3,4,5, 這個時候利用模糊查詢來做關聯就可以達到目的了,做法如下:













mysql像個蛋一樣,連基本的函數都不提供,難怪被oracle買了。只有通過存儲過程來搞,郁悶得不行。
















































posted on 2011-02-26 21:28 都市淘沙者 閱讀(9533) 評論(0) 編輯 收藏 所屬分類: Oracle/Mysql/Postgres/