sql >> Database >  >> RDS >> Mysql

SQL-query ten minste één van iets

Om alle gebruikers te vinden met ten minste één bericht met een beoordeling boven de 10, gebruik je:

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

EXISTS geeft niet om de SELECT-instructie die erin zit - je zou NULL kunnen vervangen door 1/0, wat zou moeten resulteren in een wiskundige fout voor delen door nul... de WHERE-clausule.

De correlatie (de WHERE p.user_id =u.id) is waarom dit een gecorreleerde subquery wordt genoemd, en zal alleen rijen uit de USERS-tabel retourneren waar de id-waarden overeenkomen, naast de beoordelingsvergelijking.

EXISTS is ook sneller, afhankelijk van de situatie, omdat het true retourneert zodra aan de criteria is voldaan - duplicaten doen er niet toe.



  1. Verbindingsreeksparameters voor Excel-gegevensbronnen

  2. SQLException:Protocolschending. Probleem met Oracle JDBC-stuurprogramma

  3. entiteiten in cascade verwijderen die niet werken in de ManyToMany-relatie

  4. MySQL INDIEN NIET NULL, geef dan 1 weer, anders 0