mysql 拆分以逗號隔開的字段並應用在in查詢

2021-08-09 13:16:30 字數 1072 閱讀 8842

利用substring_index及笛卡爾積來迴圈拆分sql欄位;

首先建立幾條資料

idvalue

computer

5,ddd,eee

phone

12,3333,11

pipe

234

假如我們需要查詢的字段in phone欄位的值(12,3333,11),我們可以用一下方法

準備示例資料

create table tbl_name (id int ,msize varchar(100));

insert into tbl_name values (1,'tiny,small,big');

insert into tbl_name values (2,'small,medium');

insert into tbl_name values (3,'tiny,big');

實現行列轉換的sql

select * from table where phone in (

select

substring_index(substring_index(a.msize,','

,b.help_topic_id+1),',',-1)

from

tbl_name a

join

mysql.help_topic b

on b.help_topic_id < (length(a.msize) - length(replace(a.msize,',',''))+1)

order by a.id;

)

原理分析

這個join最基本原理是笛卡爾積。通過這個方式來實現迴圈。 以下是具體問題分析: length(a.size) - length(replace(a.msize,』,』,」))+1 表示了,按照逗號分割後,改列擁有的數值數量,下面簡稱n join過程的偽**:

根據id進行迴圈

id = id +1

}

以上及實現了字段按逗號分隔來用作in的子查詢

mysql處理以逗號隔開的字段內容

有乙個字段儲存了checkbox內容,比如職業目標選擇對於資料庫欄位otworkgoal,儲存了1,2,3,4內容 現在需要使用純mysql語句,將字段otworkgoal根據內容,進行翻譯成中文的內容。可使用find in set 函式 concat ws 函式實現。find in set 可參考...

MySQL 模糊查詢某字段用逗號隔開

1.查詢pnum欄位中包含3或者9的記錄 select from test where find in set 3 pnum or find in set 9 pnum select from test where concat pnum,regexp 0 9 3 9 0 9 2.cover欄位為 ...

MySQL 模糊查詢某字段用逗號隔開

1.查詢pnum欄位中包含3或者9的記錄 select from test where find in set 3 pnum or find in set 9 pnum select from test where concat pnum,regexp 0 9 3 9 0 9 2.cover欄位為 ...