将分隔的子字符串与查询中的列表匹配

时间:2018-07-25 20:49:31

标签: mysql regex parsing

我正在查看mySQL表中的列(Codes),该列具有一系列以';'分隔的代码。

id | Codes
------------
01 | O5.12;Z33.9;A70.2;PR96
02 | A57.0;Z64.88;OA100  
03 | O7.99;PR1;CO45

我还有第二组数据:代码类型和属于每种类型的代码的列表。目前,它们的组织方式如下(尽管可以更改此结构):

CodeType | Code
--------------------
HR-PT    | Z33.9
HR-PT    | O5.12
NCS      | PR96
NCS      | CO96

问题:对于第一个表中的每条记录,我想说是否有任何代码属于特定的集合。类似于this question,我这样解决了它:

select Codes regexp '(^|.*;)(Z33[.]9|O5[.]12)(;.*|$)') as HRPT_Code

但是,我想动态提取HR-PT代码以进行检查,而不是使用静态列表,例如使用类似于select Code from code_types where CodeType='HR-PT'

的东西

任何想法如何有效地做到这一点?

1 个答案:

答案 0 :(得分:2)

您不必使用正则表达式,而可以用逗号(, replace分隔符,然后使用find_in_set

SELECT id
FROM   codes c
WHERE  EXISTS (SELECT *
               FROM   code_types ct
               WHERE  ct.code_type = 'HP-PT' AND
                      FIND_IN_SET(ct.code, REPLACE(c.codes, ';', ',')) > 0)