我有以下查询,我从表中获取一些数据,并使用结果插入到名为 FinalTable 的表中。FinalTable.col1是一个pk。但是,在运行以下查询之前,finalTable 中已经存在具有相同 pk 的某些行。我想更改它,以便它插入(如果 FinalTable 中不存在 pk)或更新(如果 FinalTable 中已存在 pk)。
INSERT INTO finalTable (col1, col2, col3, col4, col5)
(
SELECT o.id, 14, 0, 1, 4
FROM Table1 c
INNER JOIN Table2 m ON c.ID = m.ID
INNER JOIN Table3 o ON m.ID = o.ID
WHERE c.ID = 40
)
Run Code Online (Sandbox Code Playgroud)
我想出的一种解决方案是在运行上述查询之前删除 FinalTable 中的所有相关行。
我想出的另一个解决方案是使用“如果存在”。我会将 select 查询放在 ifexists 语句、if 子句和 else 子句中。我不喜欢这个解决方案,因为我必须将选择查询放在 3 个位置,而不是仅放在 1 个位置。
if exists(...)
begin
... -- update
end
else
begin
... -- insert
end
Run Code Online (Sandbox Code Playgroud)
MERGE对于这种情况,您可以使用声明。
MERGE finaltable as target
USING (SELECT o.id
FROM Table1 c
INNER JOIN Table2 m ON c.ID = m.ID
INNER JOIN Table3 o ON m.ID = o.ID
WHERE c.ID = 40) as source
ON target.col1=source.id
WHEN MATCHED THEN
UPDATE SET col2=14,col3=0,col4=1,col5=4
WHEN NOT MATCHED THEN
INSERT (col1, col2, col3, col4, col5)
VALUES (source.id,14, 0, 1, 4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5794 次 |
| 最近记录: |