Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-两个表之间的更新查询_Sql_Oracle_Sql Update_Correlated Subquery - Fatal编程技术网

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

Oracle SQL-两个表之间的更新查询,sql,oracle,sql-update,correlated-subquery,Sql,Oracle,Sql Update,Correlated Subquery,我正在尝试编写(我认为这是一个直截了当的)更新查询,但由于我是SQL世界的新手,这有点麻烦 我的设想: 表1 Parent Child Alias -------------------------- New Member1 AliasABC New Member2 AliasDEF New Member3 AliasGHI Parent Child Alias -----------------------

我正在尝试编写(我认为这是一个直截了当的)更新查询,但由于我是SQL世界的新手,这有点麻烦

我的设想:

表1

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

Parent     Child     Alias
--------------------------
Parent08   Member8   Alias08
Parent09   Member2   Alias09
Parent10   Member9   Alias10
查询结果应如下所示:

表1

Parent     Child     Alias
--------------------------
New        Member1   AliasABC
New        Member2   AliasDEF
New        Member3   AliasGHI
Parent     Child     Alias
--------------------------
New        Member1   AliasABC
Parent09   Member2   AliasDEF
New        Member3   AliasGHI
Parent     Child     Alias
--------------------------
(null)     Member1   AliasABC
Parent09   Member2   AliasDEF
(null)     Member3   AliasGHI
我只想更新父列,如果子列已经存在于表2中,而其他所有内容都保持不变。我尝试过使用更新相关查询,但结果是一片空白

更新:

此查询部分成功:

update TABLE1 p1
set (p1.PARENT) = (
       select p2.PARENT
       from TABLE2 p2
       where p2.CHILD = p1.CHILD
   )
结果是:

表1

Parent     Child     Alias
--------------------------
New        Member1   AliasABC
New        Member2   AliasDEF
New        Member3   AliasGHI
Parent     Child     Alias
--------------------------
New        Member1   AliasABC
Parent09   Member2   AliasDEF
New        Member3   AliasGHI
Parent     Child     Alias
--------------------------
(null)     Member1   AliasABC
Parent09   Member2   AliasDEF
(null)     Member3   AliasGHI
提前感谢,

标记

如果要在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。

如果要在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。

我认为这将适用于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);

我认为这将为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);

除非我弄错了,否则这是SQL Server/Sybase/Posgres语法,在Oracle中不起作用。我能理解答案。我不理解UPDROWS。在oracle中,这将产生错误
SQL命令未正确结束
,除非我弄错了,否则这是SQL Server/Sybase/Posgres语法,在oracle中不起作用。我能理解答案。我不理解上面的投票。在oracle中,这将产生错误
SQL命令未正确结束