Sql 在选择中使用CTE中的数组。。。哪里任何

Sql 在选择中使用CTE中的数组。。。哪里任何,sql,postgresql,Sql,Postgresql,我想在一个CTE中创建一个ID数组,并在多个ANY中使用它。但我在第一个问题上遇到了麻烦。使用第9.3页 WITH x AS ( SELECT ARRAY(SELECT * FROM generate_series(1, 10)) AS a ) SELECT 1 WHERE 2 = ANY(SELECT a FROM x) 我所期望的是,ANY中的SELECT语句将返回先前创建的数组。相反,我得到了以下错误: 错误:运算符不存在:整数=整数[] 第6行:其中2=any从x中选择a 我不

我想在一个CTE中创建一个ID数组,并在多个ANY中使用它。但我在第一个问题上遇到了麻烦。使用第9.3页

WITH x AS (
    SELECT ARRAY(SELECT * FROM generate_series(1, 10)) AS a
)
SELECT 1
WHERE 2 = ANY(SELECT a FROM x)
我所期望的是,ANY中的SELECT语句将返回先前创建的数组。相反,我得到了以下错误:

错误:运算符不存在:整数=整数[]

第6行:其中2=any从x中选择a

我不明白问题是什么,因为select语句应该返回一个数组,而ANY语句接受一个数组


当然,我不可能每次都在CTE中创建数组并动态创建它,但我认为这比创建一次性能要差。我必须有一个数组,因为在我的实际表上执行此操作时,任何不带数组的都会更改查询计划,而不是将这个小示例更改为性能较差的内容。

执行此操作的常规SQL方法不使用数组:

WITH x AS (
      SELECT gs.a
      FROM generate_series(1, 10)) AS gs(a)
     )
SELECT 1
WHERE 2 IN (SELECT a FROM x);
当然,您可能出于不同的原因使用数组,例如学习数组。但是,您至少应该了解解决此问题的SQL方法。

任何方法都有两种形式。如果你想用

或者如果你想使用


ANY返回一个数组,好的。但是2真的是一个整数[]还是一个简单的整数?为什么要使用数组来实现这一点?一个简单的子查询是标准的SQL方法。@GordonLinoff我在上面说过,我用一个标准的子查询和一个数组得到了一个不同的查询计划,数组计划更好。我理解这种方法,但在实际数据中使用它比使用ANYmy数组性能差。不管怎样,当我在其中获得多个值时,IN通常都会更改为ANY,但是当在数组上使用ANY而不是在表/行集上使用ANY时,计划会发生显著变化。Duh!第一个正是我想做的。。。谢谢
WITH x AS (
    SELECT ARRAY(SELECT * FROM generate_series(1, 10)) AS a
)

SELECT 1
FROM x
WHERE 2 = ANY(a)
WITH x AS (
    SELECT * FROM generate_series(1, 10) AS a
)

SELECT 1
WHERE 2 = ANY(SELECT a FROM x)