筛选SQL数组text []以匹配包含参数的值

问题描述

我有一个带有TEXT []列的表。我想返回所有具有至少一个包含我的参数的数组值的行。

现在我正在做WHERE array_to_string(arr,',') ilike '%myString%'

但是我觉得他们必须是进行此类搜索的更好的优化方法。 另外,我还想搜索以我的参数开头或结尾的值。

CREATE TABLE IF NOT EXISTS my_table
(
    id                  BIGSERIAL,col_array           TEXT[],CONSTRAINT my_table_pkey PRIMARY KEY (id)
)
insert into my_table(col_array)
VALUES ('{ABC,DEF}'),('{FGH,IJK}'),('{LMN}'),('{OPQ}');
       
select * from my_table where ARRAY_TO_STRING(col_array,') ilike '%F%';

这有效,因为它仅返回前两行。

您可以在此处找到sqlfiddle:http://sqlfiddle.com/#!17/09632/7

解决方法

我将使用子查询:

select t.*
from my_table t
where exists (select *
              from unnest(t.col_array) as x(e)
              where x.e ilike '%F%')

您可能需要重新考虑对模型进行非规范化的决定。

Quote from the manual

未设置数组;搜索特定的数组元素可能是数据库设计错误的标志。考虑使用单独的表,该表的每个行都将是一个数组元素。这将更易于搜索,并且可能会针对大量元素进行更好地缩放。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...