小编典典

使用SQL中修改的关系复制同一表中的数据

sql

我们需要将数据从一个公司复制到另一个公司,为此,我们需要将一个表中存在的所有数据复制到同一表中,但使用不同的公司ID。

表1:员工

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

表2:组合值

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

我想使用更新的companyid复制同一表中表1和表2中的所有数据

对于下面的表2是查询=>它按预期工作

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

结果

表2:组合值

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,由于表2中存在“部门”和“类别”的更新ID值,我无法执行相同操作

预期成果 表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查询执行相同的操作


阅读 156

收藏
2021-04-14

共1个答案

小编典典

您可以使用此:

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;

经过右旋测试

2021-04-14