表中的每个id都有一个标签列,其中的文本是逗号分隔的字符串,例如生物学、生命科学、有机体、生物技术。
我正在使用这个查询来选择所有的I,这些I都类似于标签“碳”。
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%'问题是,因为也有像“二氧化碳”这样的标签,所以有重复的ids。
是否有方法选择只匹配单引号之间的文本的Is?
以上查询返回
3362 │ Polycyclic aromatic hydrocarbon,Nature
69984 │ Low-carbon economy,Renewable Energy
444573 │ Fluorocarbon,Magnesium
5637 │ Carbon,Fossil但我希望它能回来
5637 │ Carbon,Fossil发布于 2018-03-01 19:12:34
修正你的数据结构!不要将标记存储在分隔字符串中。Postgres中的一个选项是作为数组。另一个表是一个单独的表,每个条目和标记都有一行(传统方法)。
下面是数组解决方案的外观:
WHERE 'carbon' = any (regexp_split_to_array(e.tags_new, ','::text)我建议您更改数据格式,以便列是一个数组。
https://stackoverflow.com/questions/49056233
复制相似问题