使用另一行的现有值更新列
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;
我的表,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;