Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Condition IN
Une condition IN teste une valeur d’adhésion dans une sous-requête ou un ensemble de valeurs.
Syntaxe
expression [ NOT ] IN (expr_list | table_subquery)
Arguments
- expression
-
Une expression de type numeric, character ou datetime évaluée par rapport à expr_list ou table_subquery et qui doit être compatible avec le type de données de cette liste ou sous-requête.
- expr_list
-
Une ou plusieurs expressions délimitées par des virgules, ou un ou plusieurs ensembles d’expressions délimitées par des virgules et entourées par des parenthèses.
- table_subquery
-
Une sous-requête qui correspond à une table avec une ou plusieurs lignes, mais est limitée à une seule colonne dans la liste de sélection.
- EN | NOT EN
-
IN retourne la valeur true si l’expression est membre de la liste d’expressions ou de la requête. NOTIN renvoie true si l'expression n'est pas membre. IN et NOT IN retournent NULL et aucune ligne n'est renvoyée dans les cas suivants : si l'expression renvoie null ; ou s'il n'y a aucune valeur expr_list ou table_subquery correspondante et qu'au moins une de ces lignes de comparaison renvoie null.
Exemples
Les conditions suivantes sont vraies uniquement pour les valeurs répertoriées :
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')
Optimisation pour les grandes listes IN
Afin d’optimiser les performances des requêtes, une liste IN qui inclut plus de 10 valeurs est analysée en interne comme un ensemble (array) scalaire. Les listes IN avec moins de 10 valeurs sont évaluées comme une série de prédicats OR. Cette optimisation est prise en charge pour SMALLINTINTEGER,,BIGINT,REAL, DOUBLEPRECISION,BOOLEAN,CHAR,,VARCHAR, DATETIMESTAMP, et les types de TIMESTAMPTZ données.
Examinez le EXPLAIN résultat de la requête pour voir l'effet de cette optimisation. Par exemple :
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)