Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
筛选SQL数组文本[]以查找包含参数的匹配值_Sql_Arrays_Postgresql - Fatal编程技术网

筛选SQL数组文本[]以查找包含参数的匹配值

筛选SQL数组文本[]以查找包含参数的匹配值,sql,arrays,postgresql,Sql,Arrays,Postgresql,我有一个带有TEXT[]列的表。我想返回至少有一个包含我的参数的数组值的所有行 现在我正在做WHERE array_to_string(arr,,')我喜欢“%myString%” 但我觉得他们的搜索方式一定是一种更好的优化方式。 另外,我还希望搜索以参数开头或结尾的值 创建不存在的表格我的表格 ( id BIGSERIAL, 列数组文本[], 约束my_table_pkey主键(id) ) 插入我的表格(列数组) 值({ABC,DEF}'), ({FGH,IJK}'), ({LMN}'),

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

现在我正在做
WHERE array_to_string(arr,,')我喜欢“%myString%”

但我觉得他们的搜索方式一定是一种更好的优化方式。 另外,我还希望搜索以参数开头或结尾的值

创建不存在的表格我的表格
(
id BIGSERIAL,
列数组文本[],
约束my_table_pkey主键(id)
)
插入我的表格(列数组)
值({ABC,DEF}'),
({FGH,IJK}'),
({LMN}'),
({OPQ}');
从my_表中选择*,其中数组到字符串(col_数组,,')类似于“%F%”;
这是因为它只返回前2行


您可以在这里找到SQLFIDLE:

我将使用子查询:

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

您可能需要重新考虑取消模型规范化的决定

数组不是集合;搜索特定数组元素可能是数据库设计错误的标志。考虑为每个项目使用一个单独的表,这将是一个数组元素。这将更容易搜索,并且对于大量元素可能具有更好的扩展性


谢谢你的帮助@a_horse_没有名字,我用
select 1
而不是
select*
完成了这项工作,效果非常好。我知道数组在SQL中不应该进行这种过滤,我将在将来考虑这一点。
select*
select 1
之间的性能绝对没有任何区别,如果你期望的话。我期望它的性能会更高。你能找到一个链接来解释原因吗?显而易见的证据是,表达式甚至没有被计算过。您可以编写
(从..中选择1/0)
,它不会抛出错误,因为它不作为
存在的子查询时会抛出错误。
“因为结果只取决于是否返回任何行,而不取决于这些行的内容,所以子查询的输出列表通常不重要。”