WHERE子句中的SQL IN运算符

WHERE子句中的SQL IN运算符,sql,arrays,postgresql,Sql,Arrays,Postgresql,以下查询: SELECT SUM (peak_power) FROM t_mpi_pv WHERE info_id IN ( SELECT mp_info_id FROM t_mp WHERE mp_id IN ( ARRAY[29800001,29800008,29800015,29800022,29800029] ) ) 不起作用。我得到一个错误: 运算符不存在:整数=整数[] 但是 工作 我做错了什么?试试: SELECT SUM (peak_power) FROM t_mpi

以下查询:

SELECT SUM (peak_power) FROM t_mpi_pv WHERE info_id IN ( 
 SELECT mp_info_id FROM t_mp WHERE mp_id IN (
  ARRAY[29800001,29800008,29800015,29800022,29800029]
 )
)
不起作用。我得到一个错误:

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

但是

工作

我做错了什么?

试试:

SELECT SUM (peak_power) FROM t_mpi_pv WHERE info_id IN ( 
 SELECT mp_info_id FROM t_mp WHERE mp_id IN 
  (29800001,29800008,29800015,29800022,29800029)
 )
)

或者,使用以下语法:

SELECT  SUM(peak_power)
FROM    t_mpi_pv
WHERE   info_id IN
        (
        SELECT  mp_info_id
        FROM    t_mp
        WHERE   mp_id = ANY(ARRAY[29800001,29800008,29800015,29800022,29800029])
        )
如果将数组作为单个绑定变量或函数的参数传递,则此选项非常有用:

CREATE FUNCTION fn_peak_power (mpids INT[])
AS
$$
        SELECT  SUM(peak_power)
        FROM    t_mpi_pv
        WHERE   info_id IN
                (
                SELECT  mp_info_id
                FROM    t_mp
                WHERE   mp_id = ANY($1)
                );
$$
LANGUAGE 'sql';

谢谢你的建议。
CREATE FUNCTION fn_peak_power (mpids INT[])
AS
$$
        SELECT  SUM(peak_power)
        FROM    t_mpi_pv
        WHERE   info_id IN
                (
                SELECT  mp_info_id
                FROM    t_mp
                WHERE   mp_id = ANY($1)
                );
$$
LANGUAGE 'sql';