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.