嗨,我需要在列字段中找到相同的标记
我的问题是:
select *, from
(SELECT *, string_agg(DISTINCT "tags".tag, ',') as tags_field
from restaurants
left JOIN tags on rest.rest_id = tags.rest_id
GROUP by rest_id) x
它返回了很多列,我只需要离开,并请求帮助
rest_id tags_field
1 "Sussi,Burger"
2 "Sussi,Pizza"
3 "Seafood"
4 "Sussi,Vok,Beer"
5 "Sussi, Pizza"
从后端我将搜索像Sussi
这样的标记,在这种情况下,它应该返回1,2,4,5行
如果我需要Sussi,Pizza
,它应该只返回1,2,并且顺序应该无关紧要
例如,我在sqlite上尝试了它,我用regexp解决了它,但是如何在posgtresql上实现它呢
tags_field REGEXP ^(?=.*\bPizza\b)(?=.*\bSushi\b)
可以将文本列转换为数组并使用数组比较
<@
表示包含在中。这意味着tags_field
必须有比萨饼和苏西才是真的。因为它是一个数组,所以顺序并不重要。所以如果您使用
ARRAY['Sussi'] <@ tags_field
,您将得到id:1,2,4,5这不会搜索“Pizza”,因为Pizza之前有空间
要查找每个比萨饼,您必须预处理数据并删除不必要的空间不推荐,但可能
在前面的查询中,您将得到ID2和ID5,因为不再有带空格的“Pizza”
正确的方法是通过更新修复您的恶意空间,更好的方法是使用
array
而不是text
作为tags_字段,但是array
部分意味着更改您的数据库结构,以便。。。我们将继续更新:更新后,您的查询将是:
不需要修剪
如果更改表结构并使用
array
而不是text
,查询将更容易:相关问题 更多 >
编程相关推荐