根据查询中的列表匹配带分隔符的子字符串

jaql4c8m  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(299)

我在看一个专栏( Codes )在一个mysql表中,它有一系列由“;”分隔的代码。

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

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

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

但是,与静态列表不同的是,我希望动态地拉取要检查的hr-pt代码,例如使用 select Code from code_types where CodeType='HR-PT' 有没有办法有效地完成这个任务?

s1ag04yj

s1ag04yj1#

你不必和正则表达式混在一起,你可以 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)

相关问题