sql - 将数据从一个表移动到另一个表,同时在不存在相应行时创建条目
问题描述
我有两张桌子CourtCase
和CaseResult
. CaseResult
包含CourtCaseID
引用CourtCase
表的外键。
该表CourtCase
包含一个字段CompleteDate
。我想CompleteDate
从CourtCase
表迁移到CaseResult
表。
我提出的用于迁移数据的查询:
UPDATE CaseResult
SET CaseResult.CompleteDate = CourtCase.CompleteDate
FROM CourtCase, CaseResult
WHERE CourtCase.CourtCaseID = CaseResult.CourtCaseID
问题是不是每个CourtCase
人都有一个条目CaseResult
,只有一些人有。因此,我需要通过上述查询来移动存在案例的日期,但还要CaseResult
为不存在的案例创建条目,并插入外键CourtCaseID
和CompleteDate
.
解决方案
在 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
根据您的实际架构调整具有更多列的部分。