Oracle SQL-两个表之间的更新查询
我正在尝试编写(我认为这是一个直截了当的)更新查询,但由于我是SQL世界的新手,这有点麻烦 我的设想: 表1Oracle 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 -----------------------
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命令未正确结束