当前位置: 首页 > 面试题库 >

使用LIKE对数组进行Postgres查询

鄢选
2023-03-14
问题内容

我正在使用psql在Postgres中查询数据库。我使用以下查询来搜索一个名为 tag 的字段,该字段的数据类型为文本数组:

select count(*) from planet_osm_ways where 'highway' = ANY(tags);

现在,我需要创建一个查询,以在 标签 字段中搜索以字母“ A”开头的任何单词。我尝试了以下方法:

select count(*) from planet_osm_ways where 'A%' LIKE ANY(tags);

这给了我一个语法错误。关于如何将LIKE与文本数组结合使用的任何建议?


问题答案:

使用unnest()函数将数组转换为行集:

SELECT count(distinct id)
FROM (
    SELECT id, unnest(tags) tag
    FROM planet_osm_ways) x
WHERE tag LIKE 'A%'

count(dictinct id)应算唯一条目planet_osm_ways表,只需更换id你的主键的名称。

话虽这么说,您应该真正考虑将标记存储在与有着多对一关系planet_osm_ways的单独表中,或者为将与拥有多对多关系的标记创建一个单独的表planet_osm_ways。现在,您存储标签的方式使得在搜索标签时无法使用索引,这意味着每次搜索都将执行全表扫描。



 类似资料:
  • 问题内容: 我已经阅读了有关如何编写这些查询的多个示例,但是我正在努力使此特定代码像在使用时运行 这是匹配以a开头的用户名的正确方法吗? 问题答案: 不,您不需要内部单引号 您现在正在运行的语句将尝试匹配而不是匹配 bindParam将确保在将所有字符串数据提供给SQL语句时自动正确引用。

  • 问题内容: 设置以下映射 通知ID是一个整数。现在我需要使用like运算符进行此HQL查询 ATT:它 就像 运算符NOT = (等于运算符) 然后我用 但是不起作用,因为Hibernate抱怨在调用User.id的getter时发生了IllegalArgumentException 即使我使用 这没用 我应该使用什么来传递查询? 问题答案: 根据Hibernate参考: str()用于将数字或时

  • 问题内容: 我的JSON数据如下所示: 给定文本“ foo”,我想返回所有具有此子字符串的元组。但是我不知道如何编写相同的查询。 我遵循了这个相关的答案,但不知道该怎么做。 这是我现在正在工作的内容: 我不想传递整个文本,而是传递并获得与该文本匹配的结果。 问题答案: 您的解决方案可以进一步简化: 或更简单一点,因为在此示例中,您实际上根本不需要行类型(): dbfiddle 在这里 但这 不是

  • 问题内容: 我的数组是这样的: 我想将其转换为: 因此,基本上,分组依据。 我尝试着: 我只是不知道如何处理相似组值的分组。 问题答案: 首先,在JavaScript中,使用遍历数组通常不是一个好主意。 因此,您可以尝试执行以下操作: 在这里使用中间对象有助于加快处理速度,因为它可以避免嵌套循环搜索数组。另外,因为使用迭代遍历对象(而不是数组)是合适的。 附录 FWIW,如果要避免在结果数组中出现

  • 我正在使用Spring-Boot 1.5.10,并将JPA连接到SQL Server2016。我确实有一个执行LIKE的自定义查询,但是当字段为NULL时,不会返回记录:

  • 为了给出backfround,我使用