Sql 在in子句中选择数组值

Sql 在in子句中选择数组值,sql,arrays,postgresql,Sql,Arrays,Postgresql,我有一个带有数组字段和以下值的Postgres表- 我想提取字段列中具有id值的所有行,下面是我尝试的查询(现在使用表别名简化): 但由于某些原因,它不会提取值。我期待这样的结果: SELECT am."id", am."field", am."field1" FROM "polls_nullableintegerarraymodel" am WHERE am."id" = ANY(am."field"); 另外,请注意表别名如何使查询更易于编写和读取 编辑: 以下是示例代码,显示了此工作模

我有一个带有数组字段和以下值的Postgres表-

我想提取
字段
列中具有
id
值的所有行,下面是我尝试的查询(现在使用表别名简化):


但由于某些原因,它不会提取值。

我期待这样的结果:

SELECT am."id", am."field", am."field1"
FROM "polls_nullableintegerarraymodel" am
WHERE am."id" = ANY(am."field");
另外,请注意表别名如何使查询更易于编写和读取

编辑:

以下是示例代码,显示了此工作模式:

with t as (
      select 1 as id, '{2}'::integer[] as field1 union all
      select 2 as id, '{1, 2}':: integer[] as field1
     )
select *
from t
where id = any(field1);
这只返回第二行

编辑二:

你似乎想要这个:

SELECT tb1."id", tb1."field", tb1."field1"
FROM "polls_nullableintegerarraymodel" tb1
WHERE tb1."field" <@ (SELECT array_agg("id") FROM tb1);
选择tb1.“id”,tb1.“字段”,tb1.“字段1”
来自“轮询\u nullableintegerarraymodel”tb1

其中tb1.“field”我期待类似的内容:

SELECT am."id", am."field", am."field1"
FROM "polls_nullableintegerarraymodel" am
WHERE am."id" = ANY(am."field");
另外,请注意表别名如何使查询更易于编写和读取

编辑:

以下是示例代码,显示了此工作模式:

with t as (
      select 1 as id, '{2}'::integer[] as field1 union all
      select 2 as id, '{1, 2}':: integer[] as field1
     )
select *
from t
where id = any(field1);
这只返回第二行

编辑二:

你似乎想要这个:

SELECT tb1."id", tb1."field", tb1."field1"
FROM "polls_nullableintegerarraymodel" tb1
WHERE tb1."field" <@ (SELECT array_agg("id") FROM tb1);
选择tb1.“id”,tb1.“字段”,tb1.“字段1”
来自“轮询\u nullableintegerarraymodel”tb1

其中tb1.“字段”根据您的评论:

我想检查arrayfield是否包含任何id值

此查询返回
字段
中的数组包含同一表(而不仅仅是同一行)中任何
id
值的所有行:

在表达式中使用
ANY
构造:

同样适用于:

使用重叠运算符
&&
和简单(在简单情况下比
数组_agg()
快)


但我预计这种变体的性能会随着大表的出现而恶化,因为组装后的阵列会变得同样大。

根据您的评论:

我想检查arrayfield是否包含任何id值

此查询返回
字段
中的数组包含同一表(而不仅仅是同一行)中任何
id
值的所有行:

在表达式中使用
ANY
构造:

同样适用于:

使用重叠运算符
&&
和简单(在简单情况下比
数组_agg()
快)


但我预计这种变体的性能会随着大表的出现而恶化,因为组装后的阵列会变得同样大。

我的要求略有不同。我想检查arrayfield是否包含任何id值。已用别名更新。这毫无意义
id
是一个数字,不是数组。第二列是数组。我想将所有ID转换成一个数组,并根据field1列进行计算。我的要求略有不同。我想检查arrayfield是否包含任何id值。已用别名更新。这毫无意义
id
是一个数字,不是数组。第二列是数组。我想将所有ID转换成一个数组,并根据field1列进行计算。有多种方法可以阅读您的问题。请澄清。以文本形式而不是屏幕截图形式提供数据。提供您的Postgres版本和表定义,使示例有意义并添加预期结果。阅读您的问题有多种方法。请澄清。以文本形式而不是屏幕截图形式提供数据。提供您的Postgres版本和表定义,使示例有意义并添加预期结果。