Ich habe eine Gruppe von Benutzern, von denen jeder viele Posts hat. Schema:
%Vor%Wie finde ich alle Benutzer, die mindestens einen Beitrag mit einer Bewertung von über 10 haben?
Ich bin mir nicht sicher, ob ich dafür eine Unteranfrage verwenden soll oder ob es einen einfacheren Weg gibt.
Danke!
Um alle Nutzer mit mindestens einem Beitrag mit einer Bewertung über 10 zu finden, verwenden Sie:
%Vor%EXISTS kümmert sich nicht um die SELECT-Anweisung darin - Sie könnten NULL durch 1/0 ersetzen, was zu einem mathematischen Fehler beim Dividieren durch Null führen sollte ... Aber es wird nicht, weil es EXISTS nur betrifft die Filterung in der WHERE-Klausel.
Die Korrelation (WHERE p.user_id = u.id) ist der Grund dafür, dass dies als korrelierte Unterabfrage bezeichnet wird und nur Zeilen aus der USERS-Tabelle zurückgegeben werden, in denen die ID-Werte übereinstimmen, zusätzlich zum Vergleich der Bewertungen.
>EXISTS ist auch schneller, abhängig von der Situation, weil es wahr zurückgibt, sobald die Kriterien erfüllt sind - Duplikate spielen keine Rolle.
Sie können den Tabellen beitreten, um die relevanten Benutzer zu finden, und DISTINCT verwenden, so dass jeder Benutzer höchstens einmal in der Ergebnismenge ist, auch wenn er mehrere Beiträge mit der Bewertung & gt; 10:
%Vor%Die richtige Antwort auf Ihre Frage ist die Antwort von OMG Ponies, WO EXISTEN beschreibender und fast immer schneller ist. Aber "SELECT NULL" sieht wirklich hässlich und kontraintuitiv zu mir aus. Ich habe SELECT * oder SELECT 1 als Best Practice dafür gesehen.
Eine andere Möglichkeit, falls wir Antworten sammeln:
%Vor%Dies könnte nützlich sein, wenn es nicht immer 1 ist, auf dem Sie testen.