我正在尝试获取类型列text[]
包含类似于某些用户输入的值的行。
到目前为止,我一直在想和做的是使用'ANY'
and 'LIKE
'运算符,如下所示:
select * from someTable where '%someInput%' LIKE ANY(someColum);
但这是行不通的。该查询返回与此查询相同的值:
select * from someTable where 'someInput' = ANY(someColum);
使用unnest()
子查询中的函数我得到了很好的结果,但是WHERE
如果可能,我需要查询此in 子句。
为什么LIKE
操作员不与操作员一起工作,ANY
并且我没有出现任何错误?我认为原因之一应该是ANY
运算符在查询的右边,但是...
unnest()
如果不使用WHERE
条款,是否有解决方案?
我的问题被标记为重复,并通过粗心的mod链接到上下文之外的问题。这里的问题最接近我的要求,所以我在这里留下答案。(我认为这可能会对寻求unnest()
解决方案的人有所帮助)
在我的情况下,DISTINCT
和unnest()
是解决方案:
SELECT DISTINCT ON (id_) * FROM ( SELECT unnest(tags) tag, * FROM someTable ) x WHERE (tag like '%someInput%');
unnest(tags)
DISTINCT ON (id_)
根据唯一id_
列,将文本数组扩展为行列表,并删除扩展产生的重复项。
更新资料
DISTINCT
不在WHERE
子句中执行此操作的另一种方法是:
SELECT * FROM someTable WHERE ( 0 < ( SELECT COUNT(*) FROM unnest(tags) AS tag WHERE tag LIKE '%someInput%' ) );