2016-03-04 29 views
0

我有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個條目,而Anna和表2中不包含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中。另外閱讀關於連接,但無法找到一種方法來解決這個問題。

+0

SQL Server或MySQL的? –

+0

@ JuanCarlosOropeza- sql server –

+0

'Raj/OH/A2345'如何?使用相同的員工ID不允許移動或更改名稱?你想要的是一個重複的員工ID? –

回答

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  
+0

。 我得到以下錯誤 - Invalud列名稱'名稱',無效列名稱'城市'等等 –

+0

你是否給了我們正確的數據庫模式?我只是用這個函數sintaxis ... http://www.w3schools.com/sql/sql_insert_into_select.asp –

+0

這個查詢是否覆蓋了上述評論中Joachim Isaksoon提到的測試用例? –