Em vs qualquer operador no PostgreSQL

Qual é a diferença entre IN e ANY operador em PostgreSQL?
O mecanismo de funcionamento de ambos parece ser o mesmo. Alguém pode explicar isto com um exemplo?

Author: Erwin Brandstetter, 2016-01-06

1 answers

Logicamente, citando o manual:

IN é equivalente a = ANY.

Mas há dois variantes de sintaxe de IN e duas variantes da construção ANY. Detalhes:

A IN () variante a tomar um conjunto é equivalente a = ANY() tomar um conjunto , como demonstrado aqui:

Mas a segunda variante de cada uma é Não equivalente à outra. A segunda variante da construção ANY tem um array (deve ser um tipo de array real), enquanto a segunda variante de IN tem uma lista de Valores separada por vírgulas. Isso leva a diferentes restrições em valores de passagem e também pode levar a diferentes planos de consulta em especial casos:


A construção ANY é muito mais versátil, pois pode ser combinada com vários operadores, não apenas =. Por exemplo:LIKE:

SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');

Para um grande número de valores, fornecendo um conjunto escalas melhores para cada:

Relacionado:

 45
Author: Erwin Brandstetter, 2018-04-09 14:52:42