我正在努力让我的头脑清醒 MERGE
sql语句。我想要实现的是:
将新值插入 CSScolorOrders
表但更新corQuantity
如果记录带有 colID
的列和 ordID
已经存在
这就是我最终的结果:
MERGE INTO CSScolorOrders AS TARGET
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE
ON (SOURCE.colID = 1) WHEN
MATCHED THEN UPDATE SET corQuantity = 1
WHEN
NOT MATCHED BY TARGET
THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
不幸的是,它没有引发任何异常,所以我不知道为什么它不起作用。
最佳答案
如讨论 here ,您会看到合并与听起来完全一样。拿两个表并搜索您加入它们的值,我们称之为“X”。如果 X 匹配,则您对该记录执行更新。如果它不存在,那么您将使用选定的值在目标表上执行插入。
在你的情况下,我不完全确定你是否加入
( ON (SOURCE.colID = 1) )
是正确的。我很确定这需要
on(Source.colID = Target.colID)
所以完整的声明应该是这样的:
MERGE INTO CSScolorOrders AS TARGET
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE
on(Source.colID = Target.colID)
WHEN MATCHED THEN
UPDATE SET corQuantity = 1
WHEN NOT MATCHED BY TARGET
THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
但我还没有对此进行测试,并且我不能 100% 确定您的表列是什么以及您尝试加入的究竟是什么。但是我提供的链接应该指向正确的方向。
希望这可以帮助!
关于一张表上的 SQL 合并命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741622/