ANY and ALL považuji za velmi užitečné, když netestujete pouze rovnost nebo nerovnost. Zvažte
'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);
jak byla použita moje odpověď na tuto otázku .
ANY , ALL a jejich negace mohou značně zjednodušit kód, který by jinak vyžadoval netriviální poddotazy nebo CTE, a podle mého názoru jsou výrazně málo využívány.
Zvažte, že ANY bude spolupracovat s jakýmkoli operátorem. S LIKE je to velmi praktické a ~ , ale bude fungovat s tsquery, testy členství v poli, testy klíčů hstore a další.
'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])
nebo:
'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])
Bez ANY nebo ALL pravděpodobně byste je museli vyjádřit jako dílčí dotaz nebo CTE přes VALUES seznam s agregací pro vytvoření jediného výsledku. Jistě, můžete to udělat, pokud chcete, ale já se budu držet ANY .
Je zde jedna skutečná námitka:Na starších verzích Pg, pokud píšete ANY( SELECT ... ) , téměř jistě na tom budete lépe z hlediska výkonu s EXISTS (SELECT 1 FROM ... WHERE ...) . Pokud používáte verzi, kde se optimalizátor změní na ANY (...) do připojení, pak se nemusíte bát. V případě pochybností zkontrolujte EXPLAIN výstup.