Betrachten Sie Folgendes:
Die Tabelle eventTypes hat 163 Zeilen.
Ereignisse hat 43.000 Zeilen.
%Vor%Dies gibt 163 Zeilen zurück. Wenn ich jedoch "WHERE events.eventID & gt; = 0" hinzufüge,
%Vor%Ich bekomme alle 43.000 Zeilen. Ich würde erwarten, dass das Fehlen einer WHERE-Klausel mir alles geben würde. Denke ich über dieses Unrecht nach?
Update: Ich habe es gerade auf einem anderen Server versucht und dasselbe Ergebnis. Meine genaue Abfrage kopiert und eingefügt ist:
%Vor%Dies gibt nur die ersten 163 Datensätze zurück. MySQL-Versionen sind 5.5.29 und 5.1.61. Ich habe in der Fehlerliste nachgesehen und nichts gefunden.
Update # 2: EXPLAIN gibt die gleiche Ausgabe mit jeder Abfrage (d. h. mit oder ohne WHERE 1 = 1)
%Vor%Update # 3 Das Testen auf einem dritten System bringt Ergebnisse, die ich erwarte, obwohl ich keine Ahnung habe warum. Das dritte System ist ein weiteres CentOS6 mit MySQL 5.1.69. Ich importierte die genauen Dumps von meinem Entwicklungssystem, das ich in das 2. Testsystem importierte, das nicht die korrekten Resultate produzierte.
Ich habe das bei SqlFiddle versucht: Ссылка
%Vor%Ich bekomme 20 Zeilen wie erwartet zurück
Wenn Sie ( events.eventID & gt; = 0 ) angeben, erhalten Sie alle Zeilen, für die diese Bedingung zutrifft, true und die Ereignistabelle hat 43000 Zeilen und die Bedingung true für alle Zeilen und Sie verwenden LEFT JOIN, so dass Sie 43000 Zeilen erhalten
Ja, Sie haben Recht, Ihre erste Anfrage ist korrekt und sie sollte das zurückgeben, was Sie erwarten.
Sie verwenden LEFT OUTER JOIN
, was alle Datensätze aus der linken Tabelle und übereinstimmenden Datensätzen aus der rechten Tabelle bedeutet.
Dies ist ein Problem, das nicht mit der MYSQL-Version in Zusammenhang steht.
Mein Vorschlag ist, überprüfen Sie bitte die Beziehung (Fremdschlüssel und Primärschlüssel), zu der Sie beide Tabelle beitreten.
Tags und Links sql mysql phpmyadmin