sql >> Database >  >> RDS >> Mysql

SQL:hebben we ENIGE/SOMMIGE en ALLE trefwoorden nodig?

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.



  1. T-SQL krijgt aantal werkdagen tussen 2 datums

  2. Hoe programmatisch DDL genereren vanuit de Oracle-database?

  3. MySQL Hoe unieke/verschillende resultaten retourneren?

  4. Hoe id van ingevoegde rij ophalen bij gebruik van upsert met WITH-clausule in Posgres 9.5?