当前位置:  开发笔记 > 编程语言 > 正文

查找文本数组包含类似于输入值的行

如何解决《查找文本数组包含类似于输入值的行》经验,为你挑选了1个好方法。

我正在尝试获取类型列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条款,是否有解决方案?



1> Rotareti..:

我的问题被标记为重复,并通过粗心的mod链接到上下文之外的问题。这里的问题最接近我的要求,所以我在这里留下答案。(我认为这可能会对寻求unnest()解决方案的人有所帮助)

在我的情况下,DISTINCTunnest()是解决方案:

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%'
  )
);

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有