0

我正在尝试在 Oracle 中创建更新语句。这是 SQL Server 中的版本:

  UPDATE ev
  SET   
     (ev.station_type = t.st_type, ev.adt = t.adt  )
  FROM  source ev 
  JOIN  dataTbl t
  ON ev.counterID = t.counterID

有两个表源表 counterID 是主键 dataTBL 表是 counterID 是外键 我正在尝试从 dataTBL 获取数据到源表。

如果有人帮助创建更新的 Oracle 版本,我将不胜感激。谢谢,更绿

4

2 回答 2

2

您想使用此技术:

  UPDATE ( SELECT ev.station_type
                , t.st_type
                , ev.adt ev_adt
                , t.adt t_adt
             FROM  source ev
                   JOIN dataTbl t
                     ON ev.counterID = t.counterID
         )
     SET station_type = st_type
       , ev_adt = t_adt
  ;

子查询创建您的结果集,此时您可以使用 SET 子句根据需要更新列。

于 2009-07-24T19:37:42.557 回答
0

我相信以下语法会起作用(手头没有 Oracle 可以检查):

UPDATE ev
SET (station_type, adt ) = (
   SELECT (t.st_type, t.adt)
   FROM dataTbl t
   WHERE t.counterId = ev.counterId
)
WHERE ev.counterId IN (SELECT t.counterID FROM t);

编辑: WHERE 子句重复看起来很难看,但正如@Steve 指出的那样,需要避免在没有匹配条目的行中插入空值dataTbl(当然,如果这在您的用例中是可能的)。如果您确实需要此类预防措施,@Steve 的基于联接的解决方案可能更可取。

于 2009-07-24T18:52:11.290 回答