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

SQL:har vi brug for NOGEN/NOGLE og ALLE søgeord?

Jeg finder ALT og ALT for at være meget nyttigt, når du ikke bare tester lighed eller ulighed. Overvej

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

som brugte mit svar på dette spørgsmål .

ANY , ALL og deres negationer kan i høj grad forenkle kode, der ellers ville kræve ikke-trivielle underforespørgsler eller CTE'er, og de er betydeligt underudnyttede efter min mening.

Overvej at ANY vil fungere med enhver operatør. Det er meget praktisk med LIKE og ~ , men vil arbejde med tsquery, array-medlemskabstest, hstore-nøgletest og mere.

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

eller:

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

Uden ANY eller ALL du skal sandsynligvis udtrykke dem som en underforespørgsel eller CTE over en VALUES liste med et aggregat for at producere et enkelt resultat. Selvfølgelig kan du gøre det, hvis du vil, men jeg holder mig til ANY .

Der er en rigtig advarsel her:På ældre Pg-versioner, hvis du skriver ANY( SELECT ... ) , vil du næsten helt sikkert være bedre stillet med hensyn til ydeevne med EXISTS (SELECT 1 FROM ... WHERE ...) . Hvis du er på en version, hvor optimeringsværktøjet vil slå ANY (...) til at deltage, så behøver du ikke bekymre dig. Hvis du er i tvivl, så tjek EXPLAIN output.



  1. Udforsker Storage Engine-indstillinger for MariaDB

  2. Problem med VBA script læsning fra MySql database

  3. MySQL-grupper efter intervaller i et datointerval

  4. MySQL-databasen afbryder forbindelsen efter 8 timer. Hvordan forebygger man det?