Оператор SQL IN в предложении WHERE - PullRequest
4 голосов
/ 29 октября 2010

Следующий запрос:

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 = 29800001  
)

Работает.

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 29 октября 2010

Попробуйте:

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)
 )
)
1 голос
/ 29 октября 2010

В качестве альтернативы используйте этот синтаксис:

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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...