这个问题源于使用ICD-9和ICD-10分类代码。
给出一组可变长度的代码前缀,从匹配这些代码的表中返回所有记录。假设代码列表足够长,足以存储在查找表中。
例如:
code_prefixes char_length
A12 3
B123 4我天真的做法是使用SUBSTRING并按以下方式列出每个不同的长度:
SELECT *
FROM main_table
WHERE SUBSTRING(code, 1, 3) IN (SELECT code_prefix FROM lookup_table WHERE char_length = 3)
OR SUBSTRING(code, 1, 4) IN (SELECT code_prefix FROM lookup_table WHERE char_length = 4)但这需要对code_prefix中的每个不同长度值进行复制,并且假定char_length总是正确的。
发布于 2022-08-15 01:04:54
您只需在一个LIKE子查询中使用EXISTS
SELECT *
FROM main_table AS M
WHERE EXISTS (SELECT 1
FROM lookup_table AS L
WHERE M.code LIKE L.code_prefix + '%'
);发布于 2022-08-15 00:41:21
到目前为止,我想出的最好的解决方案如下:
SELECT *
FROM main_table AS M
WHERE EXISTS (
SELECT 1
FROM lookup_table AS L
WHERE SUBSTRING(M.code, 1, LEN(L.code_prefix)) = L.code_prefix
)https://stackoverflow.com/questions/73356034
复制相似问题