【问题标题】:SQL Server Duplicating rows with dependenciesSQL Server复制具有依赖关系的行
【发布时间】:2015-02-17 23:43:45
【问题描述】:

我有以下三个具有父子关系的表:

------------
|Company   |
------------
CompanyId

------------
|Agent     |
------------
AgentId
CompanyId

------------
|Work      |
------------
WorkId
AgentId

我想复制给定公司的所有记录,并插入到同一个表中,保持关系。我应该如何处理?

【问题讨论】:

  • CompanyIdAgentIdWorkId 标识列吗?你想复制所有 3 个表吗?这些表中是否还有更多列(每个表至少再添加一个)
  • 为什么???是否没有主键或其他约束来确保此类事情不会发生?
  • @dotnetom 是的,它们是标识列。我想使用特定过滤器复制所有三个表中的记录(例如复制 CompanyId 1 的所有记录/子项),并将其插入到保持关系的相同表中。
  • 为什么不使用连接 3 个表的视图?创建另一个可能很快与现有表不同步的表的真正原因是什么?

标签: sql sql-server tsql


【解决方案1】:

使用LEFT JOIN 获取 3 个表中的所有条目。

SELECT C.CompanyId,A.AgentId,W.WorkId
FROM Company C
LEFT JOIN Agent A ON C.CompanyId=A.CompanyId
LEFT JOIN Work W ON A.AgentId=W.AgentId 

【讨论】:

    【解决方案2】:

    小心你的要求......

    1. 您可能需要将 * 更改为每个表的字段子集,如果 身份存在。
    2. 您需要使用 companyID 填充“”以进行复制。或者可能完全删除“”
    3. 这假定 CompanyID 不是身份。否则,我们必须在创建子记录时继续使用该 ID。

    .

    INSERT INTO company SELECT * FROM Company WHERE CompanyID = '';
    INSERT INTO agent SELECT * FROM agent WHERE CompanyID = '';
    INSERT INTO work SELECT * FROM work w WHERE exists 
       (SELECT 1 FROM agent a WHERE A.companyID='' and w.AgentID = a.AgentID);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多