合并具有不同列的表(SQL Server)

时间:2016-03-04 18:56:58

标签: sql-server database join merge rdbms

我有2个表格,详情如下

表1

Name | City | Employee_Id
-----------------
Raj  | CA   | A2345
Diya | IL   | A1234
Max  | PL   | A2321
Anna | TX   | A1222
Luke | DC   | A5643

表2

Name | City | Employee_Id | Phone | Age
---------------------------------------
Raj  | CA   | A2345       | 4094  | 25
Diya | IL   | A1234       | 4055  | 19
Max  | PL   | A2321       | 4076  | 23

如您所见,Employee_Id是两列中的公共列。我想将表1中的所有条目更新到表2中。

Raj,Divya和Max已经出现在表2中。因此它不应该在表2中创建重复条目并跳过这3个条目,而表2中不存在Anna和Luke。所以这应该作为新的添加行。

SQL应该能够合并这两列,并忽略已经存在的行。决赛桌2必须与此类似。

表2

Name | City | Employee_Id | Phone | Age
---------------------------------------
Raj  | CA   | A2345       | 4094  | 25
Diya | IL   | A1234       | 4055  | 19
Max  | PL   | A2321       | 4076  | 23
Anna | TX   | A1222       |       |   
Luke | DC   | A5643       |       |   

有没有办法实现这个目标?我对SQL很新,所以任何输入都会有很大的帮助。我读到了关于合并和更新功能,但我想合并是在Transact-SQL中。还阅读有关连接但无法找到解决此问题的方法。

1 个答案:

答案 0 :(得分:0)

演示设置

CREATE TABLE Table1
    ([Name] varchar(4), [City] varchar(2), [Employee_Id] varchar(5));

INSERT INTO Table1
    ([Name], [City], [Employee_Id])
VALUES
    ('Raj', 'FL', 'A2345'),
    ('Diya', 'IL', 'A1234'),
    ('Max', 'PL', 'A2321'),
    ('Anna', 'TX', 'A1222'),
    ('Luke', 'DC', 'A5643');

CREATE TABLE Table2
    ([Name] varchar(4), [City] varchar(2), [Employee_Id] varchar(5), [Phone] int, [Age] int);

INSERT INTO Table2
    ([Name], [City], [Employee_Id], [Phone], [Age])
VALUES
    ('Raj', 'CA', 'A2345', 4094, 25),
    ('Diya', 'IL', 'A1234', 4055, 19),
    ('Max', 'PL', 'A2321', 4076, 23);

MERGE QUERY

MERGE Table2 AS target
    USING Table1 AS source 
    ON (target.[Employee_Id] = source.[Employee_Id])
    WHEN MATCHED THEN 
        UPDATE SET [Name] = source.[Name],
                   [City] = source.[City]
WHEN NOT MATCHED THEN
    INSERT ([Name], [City], [Employee_Id], [Phone], [Age])
    VALUES (source.[Name], source.[City], source.[Employee_Id], NULL, NULL);

SELECT *
FROM Table2