SQL-Abfrage mindestens eines von etwas

8

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!

    
ash 07.07.2010, 17:32
quelle

6 Antworten

19

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.

    
OMG Ponies 07.07.2010, 17:35
quelle
2

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%     
Ike Walker 07.07.2010 17:37
quelle
1
%Vor%     
xagyg 08.07.2010 01:44
quelle
1

Verwenden Sie einen inneren Join:

%Vor%     
Jon Weers 07.07.2010 17:34
quelle
0
%Vor%

Zusätzlich sagt Ihnen das, was ihre höchste Bewertung ist.

    
Zak 07.07.2010 17:46
quelle
0

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.

    
orbfish 07.07.2010 18:01
quelle

Tags und Links