首页 新闻 搜索 专区 学院

关于sql REGEXP 多对多的查询

0
[已解决问题] 解决于 2020-07-29 10:07
  • 问题
s_ids 包含多个,逗号分隔
查询的时候,如何匹配
  • 数据表结构
id  |  name |  s_ids
--- | ---   | --- 
1   | tom   | 1,2
2   | jane  | 51
3   | jane  | 5,6,7,8,9,10,52
  • 查询语句
# 查询包含有 1 或 2的 记录,期望仅查出第一条
SELECT * FROM tab WHERE s_ids REGEXP '1|2|3';
  • 结果
    会把所有记录都查询出来
蜗牛噢的主页 蜗牛噢 | 菜鸟二级 | 园豆:426
提问于:2020-02-11 16:00
< >
分享
最佳答案
0

暂未找到方案

蜗牛噢 | 菜鸟二级 |园豆:426 | 2020-07-27 17:25
其他回答(1)
0

为什么非得用REGEXP呢,目测你那个正则也不对样
select top 1 * from tab where (',' + [s_ids]+',') like '%,1,%' or ( ',' + [s_ids]+',') like '%,2,%' order by id

select top 1 * from tab where (',' + [s_ids]+',') REGEXP '.*,1,.*$|.,2,.$' -- 没有mysql环境,未测试

Adming | 园豆:36 (初学一级) | 2020-07-29 22:23

select top 1 * from tab where (',' + [s_ids]+',') REGEXP '.*,1,.*$|.,2,.$'

支持(0) 反对(0) Adming | 园豆:36 (初学一级) | 2020-07-29 22:27

@Adming: 感谢回复,不是非得用 REGEXP ,请问还有其他的方式可以查出来么

目前下面是可以查出来了:

SELECT * FROM `test` where concat(',' , s_ids, ',') REGEXP '.*,1,.*$|.*,2,.*$'
支持(0) 反对(0) 蜗牛噢 | 园豆:426 (菜鸟二级) | 2020-08-03 18:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册