2017-03-28 8 views
0

Ich habe zwei Tabellen.sql links beitreten klärung

Ich brauche alle Datensätze aus Tabelle A, außer wo es eine Übereinstimmung in Tabelle B, dann Tabelle nehmen B Übereinstimmungswert

Also, wenn Tabelle A eine Übereinstimmung mit Tabelle B hat, dann muss ich diesen Wert ausschließen die Ergebnisse (dh alle Datensätze aus Tabelle A übernehmen und Datensätze aus Tabelle A durch den übereinstimmenden Wert aus Tabelle B ersetzen).

von meinem Verständnis verließ ich trat die beiden Tabellen auf die passende Spalte und fügte dann eine Where-Klausel, um die Null-Werte auszuschließen, aber ich bin mir nicht sicher, ob das korrekt ist.

Daten:

tableA (col1 =ID, col2 =value) 
1, 5 
2, 3 
3, 7 

tableB (col1 =ID, col2 =value) 
4, 6 
2, 9 

expected result: 

5 

9 

7 

Dies ist die nächste, die ich bekommen habe, aber ich bin nicht sicher, ob es korrekt ist:

select * from tableA tblA 
left join tableB tblB 
on tblA.matchingColumn = tblB.matchingColumn 
where tblB.matchingColumn is null 
+0

Ihre Abfrage sieht richtig . –

Antwort

1

Dadurch werden alle Zeilen in TABLEA zurückzukehren. Wenn in TABLEB ein passender Wert vorhanden ist, wird dieser als VALUE verwendet.

SELECT TBLA.ID 
    , COALESCE(TBLB.VALUE, TBLA.VALUE) VALUE 
FROM TABLEA TBLA 
    LEFT JOIN TABLEB TBLB 
     ON TBLA.ID = TBLB.ID; 

UPDATE-SQLFiddle für diesen Thread

+0

Ich habe Ihre Anfrage versucht und ich glaube, dass ich meine Daten ein wenig falsch präsentiert habe. Ich habe die Tabellen aktualisiert und das erwartete Ergebnis. Könnten Sie bitte noch einmal nachsehen? – HelpMeWithXSLT

+0

@HelpMeWithXSLTPrüfen Sie in diesem http://sqlfiddle.com/#!9/7bc86/4 – Pons

1

links von TableA verbinden Führen zu TableB und den Wert von einem oder b verwenden, um auf Spiel in TableB je

select tablea.id, case when tableb.id is null then tablea.value else tableb.value end value 
from tablea 
left join tableb on tablea.id=tableb.id