Oracle SQL - 两个表之间的更新查询

时间:2014-06-06 13:54:46

标签: sql oracle sql-update correlated-subquery

我正在尝试编写(我认为是直接的)更新查询,但是因为我是SQL的新手,所以它有点麻烦。

我的情景:

表1

Parent     Child     Alias
--------------------------
New        Member1   AliasABC
New        Member2   AliasDEF
New        Member3   AliasGHI

表2

Parent     Child     Alias
--------------------------
Parent08   Member8   Alias08
Parent09   Member2   Alias09
Parent10   Member9   Alias10

查询结果应如下所示:

表1

Parent     Child     Alias
--------------------------
New        Member1   AliasABC
Parent09   Member2   AliasDEF
New        Member3   AliasGHI

如果Table2中已存在Child,并且保持其他所有内容不变,我只想更新Parent列。我已尝试使用更新相关查询,但已绘制空白。

更新

此查询部分成功:

update TABLE1 p1
set (p1.PARENT) = (
       select p2.PARENT
       from TABLE2 p2
       where p2.CHILD = p1.CHILD
   )

结果:

表1

Parent     Child     Alias
--------------------------
(null)     Member1   AliasABC
Parent09   Member2   AliasDEF
(null)     Member3   AliasGHI

提前致谢,
标记

3 个答案:

答案 0 :(得分:2)

如果你想在Oracle中这样做,你需要一个相关的子查询:

update table1
    set parent = (select parent from table2 where table2.child = table1.child)
    where exists (select 1 from table2 where table2.child = table1.child);

这是标准SQL,应该适用于所有数据库,尤其是Oracle。

答案 1 :(得分:1)

 update 

    (select a.parent p1,a.child,b.parent p2
    from table1 a, table2 b
    where a.child= b.child )

 set p1 = p2;

答案 2 :(得分:1)

我认为这会为oracle做到这一点:

UPDATE table1 
SET 
  table1.Parent = 
    (
     SELECT table2.Parent
     FROM table2 
     WHERE table1.Child = table2.Child
    )
WHERE 
  EXISTS (SELECT table2.Parent
          FROM table2 
          WHERE table1.Child = table2.Child);

SQLFiddle