如何在SQL SERVER中合并两个表?

时间:2016-05-18 10:33:17

标签: sql sql-server

我有以下两个表T1和T2。

表T1

Id   Value1

1    2
2    1
3    2

表T2

Id   Value2

1    3
2    1
4    1

我需要一个SQL SERVER查询来返回以下内容

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

提前致谢!!

5 个答案:

答案 0 :(得分:1)

您可以通过完整外部加入并使用 ISNULL

来实现此目的

使用给定的样本数据执行:

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

结果:

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

答案 1 :(得分:0)

仅供参考 - Merge表示SQL Server中存在不同的内容。

我建议如果你有一个包含所有可能Id值列表的表,我会从中选择所有内容,并有两个左外连接到T1和T2。

假设没有一个,只有提供的内容,听起来你想要一个完整的外部联接。

这样的事情应该有效:

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

答案 2 :(得分:0)

这是一个基本的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)

这会将两个表连接在一起,即使没有匹配也会保留两个表的记录。

由于完全连接,COALESCE()用于替换空值。

答案 3 :(得分:0)

请试试这个。它与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

答案 4 :(得分:0)

以下是完全加入的一般语法。

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