替代Oracle的相关更新

时间:2017-09-15 11:00:54

标签: sql oracle oracle11g

如何将此查询重新编写为示例更新。有人可以一步一步地解码我。整个table1是否在这里更新/

 UPDATE
    (SELECT 
    A.COLUMN1 A_COLUMN1,
    B.COLUMN2 B_COLUMN2
    FROM TABLE1 A,TABLE2 B
    WHERE A.COLUMN3=B.COLUMN3 AND A.COLUMN4=B.COLUMN4)
    SET A_COLUMN1=B_COLUMN2;

2 个答案:

答案 0 :(得分:1)

让我回答这个问题。

子查询使用内连接。因此,子查询将过滤掉与两个表中的连接条件不匹配的行。这发生在更新之前。

因此,并非所有行都会更新。如果要更新所有行,请使用left join或:

UPDATE TABLE1
    SET A_COLUMN1 = (SELECT B.B_COLUMN2
                     FROM TABLE2 B
                     WHERE A.COLUMN3 = B.COLUMN3 AND A.COLUMN4 = B.COLUMN4
                    );

答案 1 :(得分:0)

这种方式只涉及共同元素

UPDATE TABLE1
    SET A_COLUMN1 = (SELECT B.B_COLUMN2
                     FROM TABLE2 B
                     WHERE A.COLUMN3 = B.COLUMN3 AND A.COLUMN4 = B.COLUMN4
                    )
   WHERE EXISTS (SELECT B.B_COLUMN2
                     FROM TABLE2 B
                     WHERE A.COLUMN3 = B.COLUMN3 AND A.COLUMN4 = B.COLUMN4);