【发布时间】:2012-03-09 11:35:53
【问题描述】:
我有以下查询,仅当它们为空时才更新值。
是否可以将所有这些放在一个查询中?
UPDATE test
SET test1 = 'hello'
WHERE test1 IS NULL
和
UPDATE test
SET test2 = 'world'
WHERE test2 IS NULL
【问题讨论】:
我有以下查询,仅当它们为空时才更新值。
是否可以将所有这些放在一个查询中?
UPDATE test
SET test1 = 'hello'
WHERE test1 IS NULL
和
UPDATE test
SET test2 = 'world'
WHERE test2 IS NULL
【问题讨论】:
你可以试试:
UPDATE test
SET test1 = NVL(test1, 'hello'),
test2 = NVL(test2, 'world')
WHERE test2 IS NULL
OR test1 IS NULL;
尽管它可能会触发您的更新触发器,即使对于实际上未更改的行也是如此。
【讨论】:
UPDATE test
SET test1 = COALESCE(test1, 'hello')
, test2 = COALESCE(test2, 'hello')
WHERE test1 IS NULL OR test2 IS NULL
COALESCE() 在这种情况下与 NVL() 的工作方式类似——返回第一个非空值。
【讨论】:
WHERE user_id = 'myuserid'
WHERE 子句来测试空值,则 test1 和 test2 都不为空的行将不必要地更新。
UPDATE test
SET Test1 = COALESCE(test1, 'hello'),
Test2 = COALESCE(test2, 'world')
WHERE test1 IS NULL OR
test2 IS NULL
【讨论】: