postgresql 如果[]中的字符串内容已经作为单独的条目存在于数据库中,则要匹配的SQL查询

fcipmucu  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(136)

第一次问Stackoverflow的问题,希望能得到一些帮助:
我在一个大数据库上工作,只掌握了SQL的基本技能(使用PostgreSQL)。
我使用德国ICD 10分类,所谓的字母索引通常包含很多同义词。代码i11.90的示例:

Benigne hypertensive Herzkrankheit
Benigne Hypertonie bei Herzkrankheit
Bluthochdruck mit Herzbeteiligung
Cor hypertonicum
HHK [Hypertensive Herzkrankheit]
Hochdruck mit Herzbeteiligung
Hochdruck mit Herzkrankheit
Hypertensive Herzhypertrophie
Hypertensive Herzkrankheit
Hypertensive Kardiomyopathie
Hypertensive Myokarddegeneration
Hypertone Herzkrankheit
Hypertonie mit Altersherz
Hypertonie mit Herzbeteiligung
Hypertonieherz
Kardiovaskuläre Hypertonie
Maligne hypertensive Herzkrankheit
Maligne Hypertonie mit Herzbeteiligung

字符串
我尝试提出一个SQL查询,它检查[]中的孤立字符串是否已经存在于同义词列表中作为单独的条目。在这个例子中,你可以看到括号中的Hypepensive Herzkranksword已经作为单独的条目存在。
我已经问过chatGPT是否可以帮助我,但要么是我的即时工程技能不够好,要么是chatGPT无法提出解决方案。
它给了我第一个解决方案:

SELECT *
FROM your_table
WHERE REGEXP_SUBSTR(your_column, '\\[([^\\]]+)\\]') IS NOT NULL;


这不起作用,tbh我不明白REGEXP_SUBSTR之后的部分
在我指定使用postgresql后,它给了我这个解决方案

SELECT *
FROM your_table
WHERE your_column ~ '.*\\[([^\\]]+)\\]';


但这并没有解决我的问题,因为这只是我熟悉的基本正则表达式,而不是检查子字符串是否已经作为单独的条目存在于表中。
如果能得到一些帮助就太好了-提前感谢。

ohtdti5x

ohtdti5x1#

只是要求ChatGPT为您解决它并不是在询问之前进行研究的好证据。
是否希望每个带有[]的同义词也作为单独的条目出现?或者只是一次查找一个特定同义词的答案?
如果是前者,那么生成一个只包含同义词的视图,以及一个删除了所有同义词的视图 *(都使用相当标准的字符串搜索和操作),然后将它们连接起来怎么样?

  • 我建议使用第二个视图(而不是仅仅将第一个视图连接到原始表),因为否则,如果同义词本身有一个同义词,您可能会错过匹配。

另外,你确定每个条目最多有一个同义词吗?如果可能不止一个,那么它仍然是可能的,但更麻烦(因为将每个包含同义词的行分成可能的多行,正如你需要的那样,是可能的,但麻烦)。

mcvgt66p

mcvgt66p2#

我为我的问题想出了以下解决方案-也许甚至可能有一种更干净的方式来编写查询,但这至少在某种程度上解决了我的问题:

SELECT identity_column, original_text_column, REGEXP_REPLACE (original_text_column, '(.*)(\[(.*)\])(.*)', '\3')
FROM table_name
WHERE original_text_column ~* '\['
AND REGEXP_REPLACE (original_text_column, '(.*)(\[(.*)\])(.*)', '\3') IN (SELECT original_text FROM table_name)

字符串

相关问题