mysql 组合所以_mysql查询以查找所有可能的组合,以组合开头和结尾(简化重复)...

bd96500e110b49cbb3cd949968f18be7.png

-- Sample data, borrowed from https://stackoverflow.com/q/7745609/808921

CREATE TABLE IF NOT EXISTS `docs` (

`id` int(6) NOT NULL auto_increment,

`groupname` varchar(100),

PRIMARY KEY (`id`)

) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `sm` (

`id` int(6) NOT NULL auto_increment,

`code` varchar(100),

PRIMARY KEY (`id`)

) DEFAULT CHARSET=utf8;

INSERT INTO `docs` (`groupname`) VALUES

('100:2000'),

('100:2001'),

('101:2000'),

('101:2001'),

('102:2002'),

('103:2003');

INSERT INTO `sm` (`code`) VALUES

('100'),

('101'),

('2000');

In MySQL, I would like to filter only the group names that contains various combinations of values in the sm table. i.e. 100,101,2000.

The below query returns other combinations too like

100:2000

100:2001

101:2000

101:2001

SQL:-

select distinct d.groupname from docs d, sm s where d.groupname like concat(s.code,'%') or d.groupname like concat('%',s.code);

Original question:-

Update:-

Expected results:-

100:2000

101:2000

解决方案

I've just broke your or condition into make multiple join with the same table like below to achieve your expected result,

select distinct d.groupname from docs d

join sm s1 on

d.groupname like concat(s1.code,'%')

join sm s2 on

d.groupname like concat('%',s2.code);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值