我有两个具有相同结构的表: masterTable(id,description,list_price) 和 changesTable(id,description,list_price)
我想将来自changesTable的更改合并到masterTable中,但我不想在更改时更新masterTable中的'description',我想保留旧值
我试图这样做
WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description=ch.description
WHERE length(changes.description)>0
但在这种情况下,list_price也不会更新。
如何正确合并它们? 感谢
以下是问题的描述:使用单个合并语句 使用表中的数据更新upd_services表 upd_services_changes_2。此合并将包括更新,删除和 插入。对于此任务,删除由负价格表示 变更表。如果更改表中的描述字段是 null然后在您更改服务表中的描述时 做更新。只有在列表价格为0或更高时才进行插入。
答案 0 :(得分:1)
WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description=ch.description
WHERE length(changes.description)>0
这只会在length(changes.description)> 0时更新,但是你打算说'总是更新list_price但只更新列表描述,当它长度为零'时你可以在两个合并中执行此操作,
WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price
和
WHEN MATCHED THEN
UPDATE SET
master.description=ch.description
WHERE length(changes.description)>0
或检查SQL dialect syntax是否有指定两种情况的方法。
提示 :有一种方法可以执行此操作,但不能使用WHERE语句。你需要使用CASE。试一试,如果你有更多问题,请稍后再回来。
答案 1 :(得分:1)
你可以试试这个
WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description = DECODE(ch.description ,
NULL,
master.description,
ch.description )
在这种情况下,如果ch.description为null,则保留原始值(即master.description),否则在master.description上覆盖ch.description
希望有所帮助