更新列,其中包含另一行的值

时间:2015-01-05 20:05:31

标签: sql oracle

我的表,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查询?

2 个答案:

答案 0 :(得分:3)

我的第一个回答:

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;

答案 1 :(得分:3)

这是一个简单的更新,因为我认为它会起作用。

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;