SQL选择ID,如唯一标记

时间:2018-03-01 18:19:52

标签: sql postgresql

我表中的每个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

1 个答案:

答案 0 :(得分:0)

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

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

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

我建议您更改数据格式,以使列成为数组。