LEFT OUTER JOIN (gibt zusätzliche Zeilen) Problem

7

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%     
Theofanis Pantelides 11.11.2009, 09:04
quelle

5 Antworten

10

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

    
Tor Haugen 11.11.2009, 09:12
quelle
4

Versuchen Sie es mit

%Vor%     
Adriaan Stander 11.11.2009 09:09
quelle
3

Wähle distinct * von @ tb1 linker äußerer Join @ tb2 ON c1 = c2

    
Gennady Shumakher 11.11.2009 09:08
quelle
3

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%     
davek 11.11.2009 09:11
quelle
2

Hmm, die Abfrage tut was sie tun soll, da es doppelte Datensätze (oder zumindest doppelte Bezeichner) in der rechten Tabelle gibt.

Um den gewünschten Effekt zu erhalten:

%Vor%

Wenn das nicht ausreicht, müssen Sie die Anforderung etwas genauer erklären.

    
Murph 11.11.2009 09:11
quelle

Tags und Links