Ik vind ALLES en ALLES erg handig als je niet alleen gelijkheid of ongelijkheid test. Overweeg
'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);
zoals gebruikt mijn antwoord op deze vraag .
ANY
, ALL
en hun ontkenningen kunnen code aanzienlijk vereenvoudigen waarvoor anders niet-triviale subquery's of CTE's nodig zouden zijn, en ze worden naar mijn mening aanzienlijk onderbenut.
Bedenk dat ANY
werkt met elke operator. Het is erg handig met LIKE
en ~
, maar werkt met tsquery, array-lidmaatschapstests, hstore-sleuteltests en meer.
'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])
of:
'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])
Zonder ANY
of ALL
je zou die waarschijnlijk moeten uitdrukken als een subquery of CTE over een VALUES
lijst met een aggregaat om een enkel resultaat te produceren. Natuurlijk kun je dat doen als je wilt, maar ik blijf bij ANY
.
Er is hier een echte waarschuwing:op oudere Pg-versies, als u ANY( SELECT ... )
schrijft , zult u qua prestaties vrijwel zeker beter af zijn met EXISTS (SELECT 1 FROM ... WHERE ...)
. Als je een versie gebruikt waarin de optimizer ANY (...)
in een join dan hoeft u zich geen zorgen te maken. Controleer bij twijfel EXPLAIN
uitvoer.