2016-05-18 11 views
-3

Ich habe die folgenden zwei Tabellen T1 und T2.Wie zwei Tabellen in SQL SERVER zusammengeführt werden?

Tabelle T1

Id Value1 

1 2 
2 1 
3 2 

Tabelle T2

Id Value2 

1 3 
2 1 
4 1 

Ich brauche eine SQL Server-Abfrage die folgenden

Id Value1 Value2 
1 2  3 
2 1  1 
3 2  0 
4 0  1 

Vielen Dank im Voraus zurück !!

+1

Mögliche Duplikat [SQL JOIN und verschiedene Arten von JOIN] (http://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins) –

Antwort

0

du von FULL OUTER JOIN erreichen mit ISNULL

Ausführung mit bestimmten Beispieldaten:

DECLARE @Table1 TABLE (Id INT, Value1 INT) 
INSERT INTO @Table1 VALUES (1, 2), (2, 1), (3, 2) 

DECLARE @Table2 TABLE (Id INT, Value2 INT) 
INSERT INTO @Table2 VALUES (1, 3), (2, 1), (4, 1) 

SELECT ISNULL(T1.Id, T2.Id) AS Id, 
     ISNULL(T1.Value1, 0) AS Value1, 
     ISNULL(T2.Value2, 0) AS Value2 
FROM @Table1 T1 
FULL OUTER JOIN @Table2 T2 ON T2.Id = T1.Id 

Ergebnis:

Id Value1 Value2 
1 2  3 
2 1  1 
3 2  0 
4 0  1 
0

FYI - Merge bedeutet etwas anderes in SQL Server.

Ich würde vorschlagen, wenn Sie eine Tabelle haben, die eine Liste aller möglichen Id-Werte enthält, würde ich alles davon auswählen und zwei linke äußere Joins zu T1 und T2 haben.

Angenommen, es gibt keinen einzigen, mit nur, was zur Verfügung gestellt wird, es klingt wie Sie wollen eine vollständige äußere Verbindung.

So etwas sollte funktionieren:

SELECT Id = COALESCE(T1.Id, T2.Id), 
     Value1 = COALESCE(T1.Value1, 0), 
     Value2 = COALESCE(T2.Value2, 0) 
FROM T1 
     FULL OUTER JOIN T2 
        ON T1.ID = T2.ID 
0

Das ist eine grundlegende FULL OUTER JOIN:

SELECT coalesce(t1.id,t2.id) as [ID], 
     coalesce(t1.value1,0) as Value1, 
     coalesce(t2.value2,0) as Value2 
FROM t1 
FULL OUTER JOIN t2 
ON(t1.id = t2.id) 

Diese beide zusammen Tisch kommen, und wird den Datensatz aus beiden Tabellen auch halten, wenn es keine Übereinstimmung gibt .

Die COALESCE() wird verwendet, um Nullwerte zu ersetzen, wegen der vollständigen Verknüpfung.

0

Bitte versuchen Sie dies. Es funktioniert gut mit SQL Server 2012.

--Create two temp tables 
    CREATE TABLE #temp1 
    (Id int,Value1 int) 

    CREATE TABLE #temp2 
    (Id int,Value2 int) 
--Insert Values to two tables 
    INSERT INTO #temp1 
    (Id,Value1) 
    VALUES 
    (1,2),(2,1),(3,3) 

    INSERT INTO #temp2 
    (Id,Value2) 
    VALUES 
    (1,3),(2,1),(4,1) 
--Query which gives desired output 
    SELECT 
     ID = COALESCE(#temp1.Id, #temp2.Id), 
     Value1 = COALESCE(#temp1.Value1, 0), 
     Value2 = COALESCE(#temp2.Value2, 0) 
    FROM 
     #temp1 FULL JOIN #temp2 ON #temp1.Id = #temp2.Id 
0

Hier ist die allgemeine Syntax für vollständige Join.

SELECT column-names 
    FROM Table1 FULL OUTER JOIN Table2 
    ON column-name1 = column-name2 
WHERE condition 
Verwandte Themen