mysql怎么找两个条件的人_mysql 如何搜索10个条件里面满足两个及以上的行?

本文介绍了一种使用SQL查询从标签表中筛选出至少包含指定集合内两个标签的方法。通过构造辅助子查询并利用FIND_IN_SET函数实现高效查询。

有一个tag表:

id

tag

1

a,b,c

2

a,c,d

3

a

4

e,g,z

5

a,y,z

请问如何查询 tag 里满足包含[a,c,e,f,g] 里面任意两个以上的?

也就是匹配到a,c的第一行第二行,匹配到e,g的第四行

回答

初始化:

CREATE TABLE `tag` (

`id` bigint(20) NOT NULL,

`tag` varchar(100) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

-- ----------------------------

-- Records of tag

-- ----------------------------

INSERT INTO `tag` VALUES ('1', 'a,b,c');

INSERT INTO `tag` VALUES ('2', 'a,c,d');

INSERT INTO `tag` VALUES ('3', 'a');

INSERT INTO `tag` VALUES ('4', 'e,g,z');

INSERT INTO `tag` VALUES ('5', 'a,y,z');

查询:

SELECT id, tag from tag , (select 'a' as needle union select 'c' union select 'e' union select 'f' union select 'g' ) as t

where id>0 and FIND_IN_SET(t.needle, tag.tag)>0 group by id having count(id)>=2;

返回

1 a,b,c

2 a,c,d

4 e,g,z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值