2016-03-04 5 views
0

У меня есть 2 таблицы с подробной информацией следующимОбъединить таблицы, имеющие различные столбцы (SQL Server)

Таблица 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. так что это должно быть добавлено как новая строка.

SQL должен иметь возможность объединить эти 2 столбца и игнорировать строки, которые уже присутствуют. Итоговая таблица 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 –

+0

Как насчет 'Raj/OH/A2345'? Никаких изменений или изменений имени не допускается с одинаковым идентификатором сотрудника? Что вы хотите, это дубликат идентификатора сотрудника? –

ответ

0

Demo Setup

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

благодарит за ваш быстрый ответ. Я получаю следующее сообщение об ошибке: Invallud column name 'name', недопустимое имя столбца 'City' и т. Д. –

+0

хорошо вы дали нам правильную схему db? Я просто использую эту функцию sintaxis ... http://www.w3schools.com/sql/sql_insert_into_select.asp –

+0

ли этот запрос охватывает тестовый пример, упомянутый Joachim Isaksoon в приведенных выше комментариях? –

Смежные вопросы