Condizione IN - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Condizione IN

Una condizione IN verifica se un valore appartiene a un set di valori o a una subquery.

Sintassi

expression [ NOT ] IN (expr_list | table_subquery)

Argomenti

espressione

Un'espressione datetime, di caratteri o numerica che viene valutata rispetto a expr_list o table_subquery e deve essere compatibile con il tipo di dati di quell'elenco o subquery.

expr_list

Una o più espressioni delimitate da virgola o uno o più set di espressioni delimitate da virgola racchiusi tra parentesi.

table_subquery

Una subquery che viene valutata una tabella con una o più righe ma che è limitata a una sola colonna nel suo elenco di selezione.

IN | NOT IN

IN restituisce true se l'espressione è un membro della query o dell'elenco di espressioni. NOT IN restituisce true se l'espressione non è un membro. IN e NOT IN restituiscono NULL e nessuna riga nei casi seguenti: se l'espressione genera un valore null; se non ci sono valori expr_list o table_subquery corrispondenti e almeno una di queste righe di confronto restituisce un valore null.

Esempi

Le condizioni seguenti sono true solo per quei valori elencati:

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

Ottimizzazione per grandi elenchi IN

Per ottimizzare l'esecuzione delle query, un elenco IN che comprende più di 10 valori viene internamente valutato come un array scalare. Gli elenchi IN con meno di 10 valori vengono valutati come una serie di predicati OR. Questa ottimizzazione è supportata per i tipi di dati SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP e TIMESTAMPTZ.

Guarda l'output di EXPLAIN per la query per vedere l'effetto di questa ottimizzazione. Ad esempio:

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)