Left Outer Join gibt nicht alle Datensätze aus der Primärtabelle zurück

8

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%     
Ted Scheckler 08.03.2011, 17:30
quelle

2 Antworten

15

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.

    
Martin Smith 08.03.2011, 17:32
quelle
0

Ü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.

    
Vishal 08.03.2011 17:36
quelle

Tags und Links