Mysql
 sql >> Database >  >> RDS >> Mysql

SQL:abbiamo bisogno di QUALCHE/ALCUNE e TUTTE le parole chiave?

Trovo che QUALSIASI e TUTTO sia molto utile quando non stai solo testando l'uguaglianza o la disuguaglianza. Considera

'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);

come ha usato la mia risposta a questa domanda .

ANY , ALL e le loro negazioni possono semplificare notevolmente il codice che altrimenti richiederebbe subquery o CTE non banali e, a mio avviso, sono significativamente sottoutilizzati.

Considera che ANY funzionerà con qualsiasi operatore. È molto utile con LIKE e ~ , ma funzionerà con tsquery, test di appartenenza all'array, test delle chiavi hstore e altro.

'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])

oppure:

'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])

Senza ANY o ALL probabilmente dovresti esprimerli come sottoquery o CTE su un VALUES elenco con un aggregato per produrre un unico risultato. Certo, puoi farlo se vuoi, ma mi atterrò a ANY .

C'è un vero avvertimento qui:nelle versioni precedenti di Pg, se stai scrivendo ANY( SELECT ... ) , quasi sicuramente starai meglio in termini di prestazioni con EXISTS (SELECT 1 FROM ... WHERE ...) . Se stai utilizzando una versione in cui l'ottimizzatore girerà ANY (...) in un join, quindi non devi preoccuparti. In caso di dubbio, controlla EXPLAIN uscita.