根据另一个表中的值更新值

Ahm*_*ana -2 db2

我在 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)

最简单的方法是什么?

Len*_*art 5

我假设是 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)