我的表中的每个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
修复您的数据结构!不要将标记存储在分隔的字符串中。 Postgres中的一个选项是作为数组。另一个是作为一个单独的表,每个条目和标签一行(传统方法)。
以下是阵列解决方案的外观:
WHERE 'carbon' = any (regexp_split_to_array(e.tags_new, ','::text)
我建议您更改数据格式,以便列是一个数组。