当前位置: 首页 > 面试题库 >

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

虞修平
2023-03-14
问题内容

我们需要将数据从一个公司复制到另一个公司,为此,我们需要将一个表中存在的所有数据复制到同一表中,但使用不同的公司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查询执行相同的操作


问题答案:

您可以使用此:

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;

经过右旋测试



 类似资料:
  • 问题内容: 我对SQL Server不太满意,但是我试图在后台做一些工作来创建我们的EMR系统所缺乏的某些功能-在患者之间复制表格(及其所有数据)。 在SQL Server 2008 R2中,我有三个表来处理已填写的这些表格: 如您所见,它们都与match_id匹配,后者被链接到Patient_id(在第一张表中)。 我想要做的是将这三个表中所有的行复制为一个特定的match_id,重新复制到它们

  • Update 语句 uodate为更新也就相当于修改 Update 语句用于修改表中的数据。 语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 更新某一行中的一个列 我们为 lastname 是 "Wilson" 的人添加 firstname: UPDATE Person SET FirstName = 'beijing' WHERE LastName = 's

  • 问题内容: 这个问题已经在这里有了答案 : 列数 (5个答案) 6年前关闭。 如何使用SQL计算表中的列数? 我正在使用Oracle 11g 请帮忙。t。 问题答案: 可以使用低位函数代替大写。例如:从user_tab_columns中选择count(*),其中lower(table_name)=’table_name’;

  • 问题内容: A)到目前为止我的方式: B)我想做这样的事情: 注意:我要复制到同一张表中。我只想轻松地将其全部复制到另一行,同时为新行赋予新的ID。 那是好的实践吗? 问题答案: 唯一的方法是像第一个示例一样列出所有列。没有像这样的语法 但是,出于SQL注入和计划缓存的原因,您应该使用参数化的SQL。

  • 问题内容: 我有2个表,两个表都有自己的自动递增ID,这些ID当然是主键。 当我要创建第三个表以建立这两个表之间的关系时,总是会出现错误。 第一个是关于您只能有1个自动递增的列,第二个是当我从那些2中删除auto_increment语句时发生的,因此由于类型匹配失败,sql不允许我将它们设置为外键。 有没有一种方法可以创建关系表而不丢失自动增量功能? 另一个可能的(但不推荐)的解决方案可能是在第一

  • 问题内容: 将所有值从表中的列复制到同一表中的另一列的最简单方法是什么? 问题答案: 使用单个语句(如果列具有相同的数据类型)