gpt4 book ai didi

sql - 从另一个表更新一个表,但也插入

转载 作者:行者123 更新时间:2023-12-02 01:11:59 25 4
gpt4 key购买 nike

我们有一个保存原始数据的源表:

SourceTable 
SD Product P1 P2
'01-Mar-2013' 'Prod1' 1 2
'02-Mar-2013' 'Prod1' 3 4
'03-Mar-2013' 'Prod1' 5 6
'04-Mar-2013' 'Prod1' 7 8
'04-Mar-2013' 'Prod2' 6 5

我们有如下的目标表:

DestinationTable 
SD Product P1 P2 Active
'01-Mar-2013' 'Prod1' 9 10 1

我正在尝试编写一个查询,该查询将为每个产品每天处理来自源表的数据,并将所有新行插入目标表,但我们还应该将事件列更新为 0目的地。如果在源中找到匹配的行(这是确定目标中是否存在 SD 和 Product 列)。

处理数据后,DestinationTable 应该如下所示:

SD               Product  P1  P2 Active  
'01-Mar-2013' 'Prod1' 9 10 0
'01-Mar-2013' 'Prod1' 1 2 1
'02-Mar-2013' 'Prod1' 3 4 1
'03-Mar-2013' 'Prod1' 5 6 1
'04-Mar-2013' 'Prod1' 7 8 1
'04-Mar-2013' 'Prod2' 6 5 1

我已尝试使用 MERGE 执行此操作,但是当找到匹配项时,您不能同时更新和插入。

MERGE DestinationTable AS d
USING (SELECT SD, Product, P1, P2 FROM SourceTable) AS s ON d.Product = s.Product AND s.SD = d.SD
WHEN MATCHED THEN UPDATE SET d.P1 = s.P1,
d.P2 = sdsP2
d.Active = 0
WHEN NOT MATCHED THEN
INSERT(SD,Product, P1, P2, Active)
VALUES(s.SD, s.Product, s.P1, s.P2, 1);

我实际上已经使用 OUTPUT 语句在 SQL 中完成了我想做的事情,但是这是针对 Oracle 10g 的,而 Oracle 没有与 SQL 相同的 OUTPUT。

还有其他方法可以实现吗?这不必通过 MERGE 完成,我愿意接受任何其他解决方案。

谢谢

最佳答案

你想做的是

  1. source中的所有记录插入destination
  2. source 中的任何匹配记录更新 destination.active

正如您正确指出的那样,您不能使用 MERGE 执行此操作,因为 MERGE 希望在找到匹配记录时执行更新,而不是更新和插入。

所以我认为您坚持将其作为两个语句来执行:update destination首先插入来自 source 的记录。

UPDATE 和 INSERT 都支持 RETURNING 子句,这将允许您为更新或插入的行收集标识符(和其他列)。它在文档中:find out more .

关于sql - 从另一个表更新一个表,但也插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16421134/

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