使用子查询进行Oracle更新

时间:2015-04-17 07:22:42

标签: sql sql-server oracle

我需要转换我的update SQL Server SQL查询

我有两张桌子:

Table1(id int, SaveId int, ChangeId int)
Table2(id int, smSaved int, boldId int)

查询是:

UPDATE
  Table1
Set 
  SaveId=tbl.smSaved
FROM
  Table1 tbl1
join Table2 tbl on tbl1.ChangeId=tbl.boldId

在MsSql中一切正常,但是当我试图在Oracle中运行它时,它不起作用。我无法弄清楚它是什么问题。

有人能解释我需要改变什么吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

UPDATE table1 SET SaveId = 
    (SELECT tbl.saved FROM table2 tbl
    WHERE tbl.boldId = table1.ChangeId)
WHERE EXISTS(
    SELECT tbl.saved FROM table2 tbl
    WHERE tbl.boldId = table1.ChangeId
)

查询的第一部分更新SaveId,其值为tbl.saved(我想你只有一行table2与table1链接。

第二部分(存在)保证你有两个表之间的对应(如果你添加存在你把NULL放在table2中不存在的行)

答案 1 :(得分:1)

您可以使用与子查询相同的MS SQL进行更新。在Oracle中,它看起来像:

UPDATE (SELECT t1.savedId t1_saved
         , t2.smsaved t2_saved
      FROM table1 t1
         , table2 t2
     WHERE t1.changeid = t2.boldid)
SET t1_saved = t2_saved