funciones - linea de comandos postgresql
IN vs CUALQUIER operador en PostgreSQL (1)
Lógicamente , citando el manual :
IN
es equivalente a= ANY
.
Pero hay dos
variantes
de
sintaxis
de
IN
y dos variantes de
ANY
construcción.
Detalles:
La variante
IN ()
toma un
conjunto
es equivalente a
= ANY()
toma un
conjunto
, como se demuestra aquí:
Pero la
segunda variante de cada uno
no
es equivalente a la otra
.
La segunda variante de la construcción
ANY
toma una
matriz
(debe ser un tipo de matriz real), mientras que la segunda variante de
IN
toma una
lista de valores
separados por comas.
Esto lleva a diferentes restricciones en el paso de valores y también
puede
conducir a diferentes planes de consulta en casos especiales:
-
Índice no utilizado con
=any()
pero utilizado conin
- Pase múltiples conjuntos o matrices de valores a una función
La construcción
ANY
es mucho más versátil, ya que se puede combinar con varios operadores, no solo
=
.
Ejemplo para
LIKE
:
SELECT ''foo'' LIKE ANY(''{FOO,bar,%oo%}'');
Para una gran cantidad de valores, proporcionar un conjunto escala mejor para cada uno:
Relacionado:
Inversión / opuesto / exclusión
La inversión de:
SELECT * FROM foo WHERE id = ANY (ARRAY[1, 2]);
"buscar filas donde la
id
no
está en la matriz"
- es:
SELECT * FROM foo WHERE id <> ALL (ARRAY[1, 2]);
Que es lo mismo que:
SELECT * FROM foo WHERE NOT (id = ANY (ARRAY[1, 2]));
Las filas con
id IS NULL
no pasan ninguna de estas expresiones.
Para incluir valores
NULL
adicionalmente:
SELECT * FROM foo WHERE (id = ANY (ARRAY[1, 2])) IS NOT TRUE;
¿Cuál es la diferencia entre
IN
y
ANY
operador en PostgreSQL?
El mecanismo de trabajo de ambos parece ser el mismo.
¿Alguien puede explicar esto con un ejemplo?