SQL IN statement in a WHERE clause

The following query:

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

Does not work. I get an error message:

"The operator does not exist: integer = integer []".

But

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

Works.

What am I doing wrong?

+4
source share
2 answers

Try:

 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) ) ) 
+4
source

Alternatively, use this syntax:

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

Useful if you pass an array as one related variable or function parameter:

 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'; 
+1
source

All Articles