我在 DB2 中有一个表(表 A),其中需要根据表 B 中的值更新列。
例如
表 A有两列和以下数据。
ID LOGIN
01 DONALD.TRUMP
02 BARACK.OBAMA
03 ABRAHAM.LINCOLN
Run Code Online (Sandbox Code Playgroud)
表B具有以下数据。
ID OLDLOGIN NEWLOGIN
01 DONALD.TRUMP DONALD.T
02 ABRAHAM.LINCOLN ABRAHAM.LIN
Run Code Online (Sandbox Code Playgroud)
我想更新表 A 的 LOGIN 值,如果它们存在于表 B 的 OLDLOGIN 中,则为它们提供 NEWLOGIN 值。
所以表A中的最终结果应该如下所示
ID LOGIN
01 DONALD.T
02 BARACK.OBAMA
03 ABRAHAM.LIN
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
我假设是 LUW 和最近的一个新的。可能最清楚的是与 MERGE 语句有关,例如:
MERGE INTO TA
USING (
SELECT OLDLOGIN, NEWLOGIN
FROM TB
) AS TB
ON TA.LOGIN = TB.OLDLOGIN
WHEN MATCHED THEN
UPDATE SET LOGIN = NEWLOGIN ;
Run Code Online (Sandbox Code Playgroud)
您还可以使用传统的 UPDATE 语句来完成此操作:
UPDATE TA
SET LOGIN = ( SELECT NEWLOGIN
FROM TB
WHERE OLDLOGIN = TA.LOGIN )
WHERE EXISTS (
SELECT 1
FROM TB
WHERE OLDLOGIN = TA.LOGIN
);
Run Code Online (Sandbox Code Playgroud)