Warum gibt MySQL LEFT JOIN nicht alle Zeilen zurück, es sei denn WHERE-Klausel - phpMyAdmin Problem

9

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.

Update # 4 Das Problem wurde gefunden. Dies ist kein MySQL-Problem. Dies ist ein Problem mit phpMyAdmin. Beim Testen in der Kommandozeile mit mysql client bekomme ich auf allen Systemen die korrekten Ergebnisse.

    
Tim Duncklee 24.01.2014, 02:58
quelle

3 Antworten

1

Ich habe das bei SqlFiddle versucht: Ссылка

%Vor%

Ich bekomme 20 Zeilen wie erwartet zurück

    
Jim Garrison 24.01.2014, 03:37
quelle
0
%Vor%

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

    
Mohammed Saqib Rajput 12.03.2014 09:27
quelle
0
%Vor%

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.

    
Java Developers Guide 12.03.2014 11:14
quelle

Tags und Links