Condição IN - AWS Clean Rooms

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Condição IN

Uma IN condição testa um valor para associação em um conjunto de valores ou em uma subconsulta.

Sintaxe

expression [ NOT ] IN (expr_list | table_subquery)

Argumentos

expressão

Uma expressão numérica, de caractere ou de data e hora que é avaliada em relação a expr_list ou table_subquery e deve ser compatível com o tipo de dados daquela lista ou subconsulta.

expr_list

Uma ou várias expressões delimitadas por vírgula ou um ou mais conjuntos de expressões delimitadas por vírgula entre parênteses.

table_subquery

Uma subconsulta que avalia em uma tabela com uma ou mais linhas, mas é limitada a somente uma coluna em sua lista de seleção.

EM | NOT EM

IN retornará verdadeiro se a expressão for membro da lista de expressões ou consulta. NOT IN retornará verdadeiro se a expressão não for um membro. IN e NOT IN retornam NULL e nenhuma linha é retornada nos seguintes casos: Se a expressão gerar nulo; ou se não houver valores correspondentes de expr_list ou table_subquery e pelo menos uma dessas linhas de comparação gerar null.

Exemplos

As seguintes condições são verdadeiras somente para os valores listados:

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

Otimização para grandes listas IN

Para otimizar a performance da consulta, uma lista IN que inclua mais do que 10 valores é internamente avaliada como uma matriz escalar. Listas IN com menos do que 10 valores são avaliadas como uma série de predicados OR. Essa otimização é compatível comSMALLINT,INTEGER,BIGINT,REAL, DOUBLEPRECISION,BOOLEAN,CHAR,VARCHAR, DATETIMESTAMP, e tipos de TIMESTAMPTZ dados.

Veja a EXPLAIN saída da consulta para ver o efeito dessa otimização. Por exemplo:

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)