Как обновить таблицу до значений в подзапросе - PullRequest
1 голос
/ 24 апреля 2019

Мне нужно провести некоторую корректирующую работу с моей базой данных, чтобы исправить некоторые ошибки в данных.У меня есть числовое поле в целевой таблице, которое мне нужно обновить до результатов основного запроса.Необходимо обновить около 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
)

1 Ответ

0 голосов
/ 24 апреля 2019

Я думаю, что это логика, которую вы хотите:

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 константы - они безопаснее и проще для записи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...