我表中的每个id都有一个标签列,其中的文本是逗号分隔的字符串 生物学,生命科学,生物,生物技术
我正在使用此查询来选择所有类似标签的ID" carbon"。
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%'
问题是,因为还有像二氧化碳和#34;这样的标签,所以有重复的ID。
有没有办法选择仅匹配 单引号之间的文字的ID?
以上查询返回
3362 │ Polycyclic aromatic hydrocarbon,Nature
69984 │ Low-carbon economy,Renewable Energy
444573 │ Fluorocarbon,Magnesium
5637 │ Carbon,Fossil
但我希望它返回
5637 │ Carbon,Fossil
答案 0 :(得分:0)
修复您的数据结构!不要将标签存储在分隔的字符串中。 Postgres中的一个选项是作为数组。另一个是作为一个单独的表,每个条目和标签一行(传统方法)。
以下是阵列解决方案的外观:
WHERE 'carbon' = any (regexp_split_to_array(e.tags_new, ','::text)
我建议您更改数据格式,以使列成为数组。