Encuentro que ANY y ALL son muy útiles cuando no solo estás probando igualdad o desigualdad. Considere
'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);
como usé mi respuesta a esta pregunta .
ANY , ALL y sus negaciones pueden simplificar en gran medida el código que, de lo contrario, requeriría subconsultas o CTE no triviales, y en mi opinión, están significativamente infrautilizados.
Considere que ANY funcionará con cualquier operador. Es muy útil con LIKE y ~ , pero funcionará con tsquery, pruebas de membresía de matriz, pruebas de clave hstore y más.
'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])
o:
'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])
Sin ANY o ALL probablemente tendría que expresarlos como una subconsulta o CTE sobre un VALUES lista con un agregado para producir un único resultado. Claro, puedes hacerlo si quieres, pero me ceñiré a ANY .
Aquí hay una advertencia real:en versiones anteriores de Pg, si está escribiendo ANY( SELECT ... ) , es casi seguro que estará mejor en términos de rendimiento con EXISTS (SELECT 1 FROM ... WHERE ...) . Si está en una versión en la que el optimizador activará ANY (...) en una unión, entonces no necesita preocuparse. En caso de duda, consulte EXPLAIN salida.