如何将表更新为子查询中的值

问题描述 投票:1回答:1

我需要对我的数据库进行一些补救工作,以纠正一些数据错误。我在目标表中有一个数字字段,我需要更新为基础查询的结果。有大约30,000行要更新。

尝试了下面详细介绍的代码的一些排列但没有成功。我意识到提供的代码是不正确的,但我希望你们能够从中推断出我想要实现的目标。

UPDATE TARGETTABLE
SET NUMFIELD = IL1.NUMFIELD 
(
SELECT IL1.ID, IL1.NUMFIELD FROM 
  (
    SELECT H.ID, TRUNC(TO_CHAR(H.TIMEFIELD,'FF9')/1000000,'000')
    "NUMFIELD" FROM HISTORIC_ALARM_LOG@REMOTETABLE
    WHERE ID IN
    (
      SELECT ID FROM TARGETTABLE 
      WHERE (NUMFIELD = 0 OR NUMFIELD = 1)
      AND TIMEFIELD BETWEEN TO_DATE('23 Apr 2019 00:00:00','DD MON YYYY 
      HH24:MI:SS') AND TO_DATE('25 Apr 2019 00:00:00','DD MON YYYY
      HH24:MI:SS') 
      AND DATASOURCEID = 3
    )
  ) IL1
)
sql oracle
1个回答
0
投票

我认为这是你想要的逻辑:

UPDATE TARGETTABLE tt
    SET NUMFIELD = (SELECT "NUMFIELD"
                    FROM HISTORIC_ALARM_LOG@REMOTETABLE rt
                    WHERE rt.ID = tt.id
                   )
WHERE tt.NUMFIELD IN (0, 1) AND
      tt.TIMEFIELD >= DATE '2019-04-23' AND
      tt.TIMEFIELD >= DATE '2019-04-25' AND
      tt.DATASOURCEID = 3;

笔记:

  • 要更新的行的过滤应位于最外面的WHERE(与UPDATE关联)。
  • 您需要一个关联子句。
  • 使用DATE常量 - 它们更安全,更易于编写。
© www.soinside.com 2019 - 2024. All rights reserved.