gpt4 book ai didi

sql-server - TSQL:从 SELECT 结果中插入或更新

转载 作者:行者123 更新时间:2023-12-02 20:51:31 25 4
gpt4 key购买 nike

我有以下查询,我从表中获取一些数据,并使用结果插入到名为 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
)

我想到的一个解决方案是在运行上述查询之前删除 finalTable 中的所有相关行。

我想到的另一个解决方案是使用“如果存在”。我会将选择查询放在 if exists 语句、if 的子句和 else 的子句中。我不喜欢这个解决方案,因为我必须将选择查询放在 3 个地方,而不是只放在 1 个地方。

if exists(...)
begin
... -- update
end
else
begin
... -- insert
end

最佳答案

您可以使用 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)

关于sql-server - TSQL:从 SELECT 结果中插入或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com