oracle根据另一个表中的2个条件更新两个

时间:2015-09-17 15:57:52

标签: database oracle join

我有2张桌子。 TableATableB

我想根据2个条件更新TableA,1个条件来自TableA,第二个条件来自TableB

UPDATE TableA SET
    TYPE = (CASE when TYPE = (SELECT DISTINCT(A.TYPE) FROM TableA A JOIN TableB B ON B.SOID = A.NAME where B.level = 9 and A.TYPE = 66) then 12
                      when TYPE = (SELECT DISTINCT(A.TYPE) FROM TableA A JOIN TableB B ON B.SOID = A.NAME where B.level = 4 and A.TYPE = 66) then 11
             else NULL 
END);

由于某种原因它没有正确更新。我只有3条符合这种条件的记录,但它正在更新它看起来的每一行。

这可以在SQL中使用 更新多个表(Oracle中不允许)时SQL UPDATE语句的语法是:

UPDATE table1, table2, ... 
SET column1 = expression1,
    column2 = expression2,
    ...
WHERE table1.column = table2.column
AND conditions;

1 个答案:

答案 0 :(得分:0)

很多谷歌之后。

我找到了解决方案。希望它能帮助别人。

    UPDATE (SELECT A.TYPE,B.LEVEL FROM TABLEA A 
            JOIN TABLEB B ON B.SOID = A.NAME where B.level IN (9,4) and A.TYPE = 66) 
    SET TYPE = (CASE (WHEN LEVEL = 9 THEN 12 
                  WHEN LEVEL = 4 THEN 11 
                  ELSE NULL 
                END);