我正在查看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'
任何想法如何有效地做到这一点?
答案 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)