1

我有两个结构相同的表:masterTable (id, description, list_price) 和 changesTable (id, description, list_price)

我想将changesTable中的更改合并到masterTable中,但是当masterTable中的changesTable为NULL时,我不想更新'description',我想保留旧值

我试着这样做

WHEN MATCHED THEN
UPDATE SET master.list_price=changes.list_price,
master.description=ch.description   
WHERE length(changes.description)>0

但在这种情况下,list_price 也不会更新。

如何正确合并它们?谢谢

这里是问题的描述: 使用单个merge 语句用表upd_services_changes_2 中的数据更新upd_services 表。此合并将包括更新、删除和插入。对于此任务,更改表中的负价格表示删除。如果更改表中的描述字段为空,则在进行更新时不要更改服务表中的描述。仅当标价为 0 或更大时才进行插入。

4

2 回答 2

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 方言语法以获取指定两个条件的方法。

提示:有一种方法可以做到这一点,但不能使用 WHERE 语句。您需要使用 CASE。试一试,如果您有更多问题,请稍后再回来。

于 2012-04-15T18:58:17.173 回答
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),否则 ch.description 会在 master.description 上被覆盖

希望能帮助到你

于 2012-04-16T05:49:27.757 回答