Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Abfrage mindestens eine von etwas

Um alle Benutzer mit mindestens einem Beitrag mit einer Bewertung über 10 zu finden, verwenden Sie:

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

EXISTS kümmert sich nicht um die SELECT-Anweisung darin - Sie könnten NULL durch 1/0 ersetzen, was zu einem mathematischen Fehler beim Teilen durch Null führen sollte ... Aber das wird es nicht, weil EXISTS nur mit der Filterung befasst ist die WHERE-Klausel.

Aufgrund der Korrelation (WHERE p.user_id =u.id) wird dies als korrelierte Unterabfrage bezeichnet und gibt zusätzlich zum Bewertungsvergleich nur Zeilen aus der USERS-Tabelle zurück, in denen die ID-Werte übereinstimmen.

EXISTS ist je nach Situation auch schneller, weil es wahr zurückgibt, sobald die Kriterien erfüllt sind - Duplikate spielen keine Rolle.