Sql 在in子句中选择数组值
我有一个带有数组字段和以下值的Postgres表- 我想提取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"); 另外,请注意表别名如何使查询更易于编写和读取 编辑: 以下是示例代码,显示了此工作模
字段
列中具有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版本和表定义,使示例有意义并添加预期结果。