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

SQL-forespørgsel på mindst én af noget

For at finde alle brugere med mindst ét ​​indlæg med en vurdering over 10, skal du bruge:

SELECT u.*
  FROM USERS u
 WHERE EXISTS(SELECT NULL
                FROM POSTS p
               WHERE p.user_id = u.id
                 AND p.rating > 10)

EXISTS er ligeglad med SELECT-sætningen i den - du kan erstatte NULL med 1/0, hvilket skulle resultere i en matematisk fejl for at dividere med nul... Men det vil den ikke, fordi EXISTS kun handler om filtreringen i WHERE-klausulen.

Korrelationen (WHERE p.user_id =u.id) er grunden til, at dette kaldes en korreleret underforespørgsel og vil kun returnere rækker fra BRUGER-tabellen, hvor id-værdierne matcher, ud over vurderingssammenligningen.

EXISTS er også hurtigere, afhængigt af situationen, fordi det returnerer sandt, så snart kriterierne er opfyldt - dubletter betyder ikke noget.



  1. Hvad er forskellen mellem mysql.createConnection og mysql.createPool i Node.js MySQL-modul?

  2. Sådan rangeres over partition i MySQL

  3. MySQL InnoDB-begrænsning virker ikke

  4. MySQL-forbindelse over SSL med Laravel