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. NOTIN restituisce true se l'espressione non è un membro. IN e NOT IN restituiscono NULL e non viene restituita alcuna riga nei seguenti casi: se expression restituisce null; o se non ci sono valori expr_list o table_subquery corrispondenti e almeno una di queste righe di confronto restituisce 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 perSMALLINT,,,,,,, INTEGERBIGINT, REAL e tipi di dati. DOUBLE PRECISION BOOLEAN CHAR VARCHAR DATE TIMESTAMP TIMESTAMPTZ
Guarda l'EXPLAINoutput della query per vedere l'effetto di questa ottimizzazione. Per 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)