View a markdown version of this page

Condición IN - Amazon Redshift

Amazon Redshift dejará de admitir la creación de UDF de Python después del 30 de junio de 2026. Empezaremos a aplicarlo por fases. Para obtener más información sobre los detalles del fin de vida de Python y las opciones de migración, consulte la entrada del blog que se publicó el 30 de junio de 2025.

Condición IN

Una condición IN prueba un valor para la membresía en un conjunto de valores o en una subconsulta.

Sintaxis

expression [ NOT ] IN (expr_list | table_subquery)

Argumentos

expresión

Expresión temporal, de carácter o numérica que se compara con expr_list (lista_de_expresiones) o table_subquery (subconsulta_de_tabla) y debe ser compatible con el tipo de datos de esa lista o subconsulta.

expr_list (lista_de_expresiones

Una o más expresiones separadas por comas o uno o más conjuntos de expresiones separados por comas entre paréntesis.

table_subquery (subconsulta_de_tabla

Una subconsulta que toma el valor de una tabla con una o más filas, pero está limitada a una columna en su lista selecta.

IN | NOT IN

IN devuelve true si la expresión es un miembro de la consulta o lista de expresiones. NOT IN devuelve true si la expresión no es un miembro. IN y NOT IN devuelven NULL y no devuelven filas en los siguientes casos: si la expresión genera un valor nulo o si no hay valores de expr_list o table_subquery que coincidan y al menos una de estas filas de comparación genera un valor nulo.

Ejemplos

Las siguientes condiciones son true solo para esos valores enumerados:

qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')

Optimización para listas IN grandes

Para optimizar el rendimiento de la consulta, una lista IN que incluye más de 10 valores se evalúa internamente como una matriz escalar. Las listas IN con menos de 10 valores se evalúan como una serie de predicados OR. Esta optimización se admite para los tipos de datos SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP y TIMESTAMPTZ.

Observe el resultado de EXPLAIN de la consulta para ver el efecto de esta optimización. Por ejemplo:

explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)