首页 > 解决方案 > 将数据从一个表移动到另一个表,同时在不存在相应行时创建条目

问题描述

我有两张桌子CourtCaseCaseResult. CaseResult包含CourtCaseID引用CourtCase表的外键。

该表CourtCase包含一个字段CompleteDate。我想CompleteDateCourtCase表迁移到CaseResult表。

我提出的用于迁移数据的查询:

UPDATE CaseResult 
SET CaseResult.CompleteDate = CourtCase.CompleteDate 
FROM CourtCase, CaseResult 
WHERE CourtCase.CourtCaseID = CaseResult.CourtCaseID

问题是不是每个CourtCase人都有一个条目CaseResult,只有一些人有。因此,我需要通过上述查询来移动存在案例的日期,但还要CaseResult为不存在的案例创建条目,并插入外键CourtCaseIDCompleteDate.

标签: sqlsql-servertsqlsql-updatesql-insert

解决方案


在 SQL Server 中,您可以在单个语句中执行此操作,使用语法MERGE它实现“更新或插入”逻辑,也称为upsert

merge CaseResults cr
    using CourtCase cc
    on (cr.CourtCaseID = cc.CourtCaseID)
when matched then update set 
    cr.CompleteDate = cc.CompleteDate
when not matched by target then insert (CourtCaseID, CompleteDate)
    values(cc.CourtCaseID, cc.CompleteDate)

您没有告诉表中所有可用的列。这假设只有两个列,CourtCaseID并且CompleteDate. 您可能需要insert根据您的实际架构调整具有更多列的部分。


推荐阅读