mysql 拆分以逗号隔开的字段并应用在in查询

本文介绍了一种使用MySQL的substring_index函数结合笛卡尔积的方法,来将一个包含多个值(以逗号分隔)的字段拆分成多个独立的值,并用于IN查询中。此方法能够有效地处理字段中的多个值,避免了传统上对每个值进行单独查询的繁琐。

mysql 拆分以逗号隔开的字段并应用在in查询

利用substring_index及笛卡尔积来循环拆分sql字段;

首先建立几条数据

idvalue
Computer5,ddd,eee
Phone12,3333,11
Pipe234

假如我们需要查询的字段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进行循环
{
    判断:i 是否 <= n
    {
        获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.mSize,',',b.ID),',',-1)
        i = i +1 
    }
    ID = ID +1 
}

以上及实现了字段按逗号分隔来用作in的子查询

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值