2010-10-29 108 views
4

在下面的查詢:SQL IN操作符的WHERE子句

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] 
) 
) 

不工作。我得到的錯誤:

"Operator does not exist: integer = integer[]".

SELECT SUM (peak_power) FROM t_mpi_pv WHERE info_id IN ( 
SELECT mp_info_id FROM t_mp WHERE mp_id = 29800001 
) 

作品。

我在做什麼錯?

回答

4

嘗試:

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) 
) 
) 
+0

有用!謝謝! – MrB 2010-10-29 07:36:29

1

可替代地,使用以下語法:如果傳遞陣列作爲單個結合的變量或函數的參數

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'; 
+0

感謝您的幫助提示。 – 2012-11-26 07:48:04