使用另一行的现有值更新列

Update Column with Value Existing for Another Row

我的表,TEST_T,在 Oracle 中:

COMPONENT_ID | FORM_ID | COMPLETE_FLAG
--------------------------------------
30101          9         N
30101          11        Y
30101          23        Y
--------------------------------------
30162          9         N
30162          11        N
30162          23        N

我需要将 COMPONENT_ID = 30162 的所有 COMPLETE_FLAG 条目更新为与每个对应的 FORM_ID.

的 30101 相同

有没有简单的 UPDATE 查询可以做到这一点?

我的第一个回答:

UPDATE
    TEST_T
SET
    TEST_T.COMPLETE_FLAG = A.COMPLETE_FLAG
FROM
    TEST_T 
    INNER JOIN TEST_T AS A
        ON TEST_T.FORM_ID = A.FORM_ID 
           AND TEST_T.COMPONENT_ID = 30162 
           AND A.COMPONENT_ID = 30101

对于 Oracle 不正确(对于 MSSQL 写错了)

为 Oracle 翻译它可能是:

UPDATE
    TEST_T
SET
    TEST_T.COMPLETE_FLAG = (SELECT A.COMPLETE_FLAG
       FROM
          TEST_T A
       WHERE 
          TEST_T.FORM_ID = A.FORM_ID 
          AND A.COMPONENT_ID = 30101)
WHERE
    TEST_T.COMPONENT_ID = 30162;

这是我认为可行的最简单的更新。

UPDATE test_t t
   SET t.complete_flag =
       (SELECT tt.complete_flag
          FROM test_t tt
         WHERE tt.component_id = 30101
           AND tt.form_id = t.form_id)
 WHERE t.component_id = 30162;