什么是最好的mysql查询在逗号分隔值列中查找逗号分隔的子组

时间:2016-05-04 07:05:44

标签: mysql regex

我想查询数据库以获取以逗号分隔的值列为IN,US,CH的记录。

查询字符串:IN,US,EN

column values : IN,UST,EN,PC,US : Should match
column values : XR,TX,LN        : Should not match  
column values : XH,IN,ST        : Should match 

我使用multile,其中条件为每个值破坏查询字符串(IN,US,EN)的集合中的查找

但我想要一些正则表达式的mysql优化查询。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解了你的帖子,但也许它会对你有所帮助。

我在sqlfiddle

中查了一下
CREATE TABLE SO_TEST
    (`id` int,`country_code` char(100));

INSERT INTO SO_TEST
    (`id`, `country_code`)
VALUES
    (1, 'IN,UST,EN,PC,US'),
    (2, 'XR,TX,LN'),
    (3, 'XH,IN,ST');

这是查询sql。

SELECT * FROM SO_TEST
WHERE concat(concat(',',country_code),',') REGEXP (concat(concat(',',REPLACE('IN,US,EN', ',', ',|,')),','))

输出结果:

| id | country_code    | 
+----+-----------------+
| 1  | IN,UST,EN,PC,US |
| 3  | XH,IN,ST        | 

查询sql的bug(sqlfiddle):

SELECT * FROM SO_TEST
WHERE concat(concat(',',country_code),',') REGEXP (concat(concat(',',REPLACE('ST', ',', ',|,')),','))

输出结果:

| id | country_code    | 
+----+-----------------+
| 3  | XH,IN,ST        |