sql >> Databasteknik >  >> RDS >> Mysql

SQL:behöver vi NÅGRA/NÅGRA och ALLA nyckelord?

Jag tycker ALLT och ALLT är väldigt användbart när du inte bara testar jämlikhet eller ojämlikhet. Överväg

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

som använde mitt svar på den här frågan .

ANY , ALL och deras negationer kan avsevärt förenkla kod som annars skulle kräva icke-triviala delfrågor eller CTE:er, och de är betydligt underutnyttjade enligt min mening.

Tänk på att ANY fungerar med vilken operatör som helst. Det är väldigt praktiskt med LIKE och ~ , men kommer att fungera med tsquery, array-medlemskapstester, hstore-nyckeltester och mer.

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

eller:

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

Utan ANY eller ALL du måste förmodligen uttrycka dem som en underfråga eller CTE över en VALUES lista med ett aggregat för att producera ett enda resultat. Visst, du kan göra det om du vill, men jag håller mig till ANY .

Det finns en riktig varning här:På äldre Pg-versioner, om du skriver ANY( SELECT ... ) , du kommer nästan säkert att få bättre prestanda med EXISTS (SELECT 1 FROM ... WHERE ...) . Om du använder en version där optimeraren vänder ANY (...) till en gå med så behöver du inte oroa dig. Om du är osäker, kontrollera EXPLAIN utdata.



  1. Unik begränsning över flera kolumner

  2. Sequelize findAll är inte en funktion

  3. MySQL diakritisk okänslig sökning (spanska accenter)

  4. Välj n slumpmässiga rader per angiven grupp