Репликация данных в одной таблице с измененными отношениями в SQL - PullRequest
0 голосов
/ 10 января 2019

У нас было требование скопировать данные из одной компании в другую, для этого нам нужно скопировать все данные, представленные в одной таблице, в одну таблицу, но с другим идентификатором компании

Таблица 1: Сотрудник

FName      Id   Department  CatId  CompanyId
Pratik      1    1            4       1
Praveen     2    2            3       1
Nilesh      3    2            3       1

Таблица 2: ComboValues ​​

Id   Fieldname  FieldValue  CompanyId
1    Department     IT        1
2    Department     HR        1
3    Category       Staff     1
4    Category       Manager   1

Я хочу скопировать все данные, представленные в таблице 1 и таблице 2, в одну таблицу с обновленным идентификатором компании

Для Таблицы2 ниже приведен запрос => Он работает как ожидалось

INSERT INTO ComboValues (Fieldname,FieldValue, CompanyId)
(SELECT Fieldname,FieldValue,2 WHERE Companyid = 1)

Результат

Таблица 2: ComboValues ​​

Id   Fieldname  FieldValue  CompanyId
1    Department     IT        1
2    Department     HR        1
3    Category       Staff     1
4    Category       Manager   1
5    Department     IT        2
6    Department     HR        2
7    Category       Staff     2
8    Category       Manager   2

Проблема:

Но для Таблицы 1 я не могу сделать то же самое из-за обновленных значений ID Отдела и Категории, представленных в таблице 2

Ожидаемый результат Таблица 1: Сотрудник

FName      Id   Department  CatId  CompanyId
Pratik      1    1            4       1
Praveen     2    2            3       1
Nilesh      3    2            3       1
Pratik      4    5            8       2
Praveen     5    6            7       2
Nilesh      6    6            7       2

Я могу сделать то же самое в C #, используя циклы, которых я хочу избежать, и делать то же самое только с SQL-запросом

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать это:

WITH tmp_table AS
(
    SELECT o.id AS id_old, n.id AS id_new
    FROM combovalues o
    INNER JOIN combovalues n 
    ON o.fieldname = n.fieldname AND o.fieldvalue = n.fieldvalue
    WHERE o.companyid = 1 AND n.companyid = 2
)
INSERT INTO employee (fname, department, catid, companyid)
SELECT fname, d.id_new, c.id_new, 2
FROM employee e
LEFT JOIN tmp_table d
ON e.department = d.id_old
LEFT JOIN tmp_table c
ON e.catid = c.id_old
WHERE companyid = 1;

Проверено в rextester

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...