SQL选择ID,如唯一标记

问题描述 投票:0回答:1

我的表中的每个id都有一个标签列,其中的文本是逗号分隔的字符串,如生物学,生命科学,生物,生物技术

我正在使用此查询来选择所有类似标签“carbon”的ID。

SELECT f.id 
FROM   ttrss_user_entries e 
INNER JOIN ttrss_entries f 
ON f.id = e.ref_id 
WHERE e.tags_new LIKE '%carbon%'

问题是,因为还有像“二氧化碳”这样的标签,所以有重复的ID。

有没有办法选择只匹配单引号之间文本的ID?

上面的查询返回

3362   │ Polycyclic aromatic hydrocarbon,Nature
69984  │ Low-carbon economy,Renewable Energy
444573 │ Fluorocarbon,Magnesium
5637   │ Carbon,Fossil

但是我希望它能够回归

5637 │ Carbon,Fossil
sql postgresql
1个回答
0
投票

修复您的数据结构!不要将标记存储在分隔的字符串中。 Postgres中的一个选项是作为数组。另一个是作为一个单独的表,每个条目和标签一行(传统方法)。

以下是阵列解决方案的外观:

WHERE 'carbon' = any (regexp_split_to_array(e.tags_new, ','::text)

我建议您更改数据格式,以便列是一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.