Wenn ich einen linken äußeren Join mache, erwarte ich, alle Datensätze zu erhalten, die die Abfrage zurückgeben würde, bevor ich die verbundene Tabelle hinzufüge, aber es gibt nur Datensätze zurück, die der verbundenen Tabelle entsprechen (dh: kein Datensatz für '092387') existiert in der 'Dokumentation' der Tabelle, so dass ich nur das Feld 'Dateiname' für diesen Datensatz als null zurückgeben möchte.) Was mache ich falsch?
%Vor%Ihre where-Klausel konvertiert die äußere Verknüpfung wieder in eine innere.
Die nicht übereinstimmenden Zeilen, die von outer join
erhalten werden, haben NULL
-Werte für documentation.status
, so dass Ihre documentation.status != 3
Bedingung diese wieder ausfiltert (Das Ergebnis des Ausdrucks NULL !=3
ist unknown
nicht true
).
Um dieses Problem zu vermeiden, verwenden Sie
%Vor% Beachten Sie, dass das Prädikat documentation.status != 3
in die Bedingung JOIN
verschoben wird.
Überprüfen Sie Ihre documentation.status!=3
Bedingung ... es könnte der Schuldige sein .. es ist ich denke, Beseitigung Ihrer erwarteten Datensätze.
Normalerweise, um dieses Problem zu debuggen, führen Sie Ihre Abfrage in Teilen aus, zuerst run-
%Vor%Überprüfen Sie die Ergebnisse und führen Sie dann die Abfrage mit dem wo -
aus %Vor% Überprüfen Sie die Ergebnisse, die sie ändern sollten, wenn Sie die letzte Bedingung hinzugefügt haben -
documentation.status!=3
Sie sollten wahrscheinlich Martins Rat befolgen und seinen Code ausführen, um die erwarteten Ergebnisse zu erhalten.
Tags und Links mysql join outer-join