经过深思熟虑之后完全重复了这一点。最初我希望结合单独的MERGE声明,但忘记了。要明确这不是一个问题。如果找不到现有的匹配记录,我想添加一条新记录。
我们说mytable
包含foo
,bar
,baz
列。其中(如果与性能相关)foo
和bar
一起唯一标识记录。
a)如果不是foo
和bar
,则插入foo
,bar
,baz
b)否则,如果foo
和bar
但baz<new>
不等于baz<old>
插入foo
,bar
,{{1} }
c)如果所有三个匹配则不执行任何操作
请注意,baz<new>
同样是新记录而非更新。基本上这是记录b
的日志记录。
作为一个额外的好处,如果我能够获得MERGE语句(到baz
)仅在my_second_table
和a
上尝试合并,那将是很好的,因为案例{{1}意味着b
没有变化,因此我们不需要触摸另一个表。但我知道你不能拥有一切。
为什么他们不能像Mongo一样使用JavaScript?
答案 0 :(得分:0)
无法在合并语句中更新两个表,但有几种选择。一个是向第一个表添加触发器。触发器将触发您想要的任何更改,并可以在第二个表中插入行:
CREATE TRIGGER IUA_Table1
AFTER INSERT OR UPDATE
ON Table1 FOR EACH ROW
BEGIN
INSERT INTO LogTable(groupid, var, sku_no )
VALUES(:new.groupid, var, sku_no);
END;
此触发器将在任何插入或更新时触发,因此不仅仅是您的合并声明。
请注意,某些人爱会触发并使用它们进行大多数事情,而其他人则非常不愿意将它们用于任何事情。就个人而言,我认为你不应该在触发器中放置太多的业务逻辑,但是对于这样的记录更改,这可能是可以接受的。