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