Ich habe zwei Tabellen, die ich mit einem linken äußeren Join verbinden möchte. Auch wenn meine linke Tabelle nur eindeutige Werte enthält, erfüllt die rechte Tabelle die Bedingung mehr als einmal und fügt dem Resultset zusätzliche Zeilen hinzu.
Code zum Replizieren des Problems:
%Vor%Wie Sie sehen können, gibt das erste SELECT 4 Zeilen zurück, wobei das zweite SELECT 6 ist, obwohl die linke Tabelle unverändert bleibt.
Wie bleibt man strikt in der linken Tabelle und verwendet nur die richtige Tabelle, um die Zeilen aus der linken Tabelle zu KOMPLEMENTIEREN?
Hilfe!
%Vor%Entschuldigung, aber Ihr Denken ist verzerrt.
Denken Sie einmal darüber nach: Wenn Sie nur eine einzige Zeile von tb2 für jede Zeile in tb1 haben wollen, welche sollte der Server wählen? Tatsache ist, dass aus der Definition eines Joins jede Zeile in der rechten Tabelle, die mit der linken Zeile übereinstimmt, eine Übereinstimmung darstellt und eingefügt werden muss.
Sie müssen sicherstellen, dass tbl2 vor dem Join eindeutige Werte für c2 hat. Murphs Vorschlag könnte es tun, vorausgesetzt, Ihre SQL-Variante unterstützt DISTINCT [Spalte] (nicht alle).
Wähle distinct * von @ tb1 linker äußerer Join @ tb2 ON c1 = c2
Wenn Sie nur einzelne Zeilen auf der linken Seite behalten möchten, müssen Sie entscheiden, was Sie rechts für jeden einzelnen Wert auf der linken Seite anzeigen möchten. Wenn Sie beispielsweise eine Zählung anzeigen möchten, können Sie dies tun:
%Vor%oder wenn Sie nur ein Vorkommen von Werten von c2 wollen:
%Vor%