Обновление таблицы с самой ранней датой из другой таблицы - PullRequest
2 голосов
/ 18 февраля 2010
IR.DOC_ID D.DOC_ID D.WORK_ID I.WORK_ID  I.DATE_SUB IR.DATE_SUB

1812450   1812450   8521    8521           11-AUG-09

1812301   1812301   8521    8521           11-AUG-09

1812400   1812400   8521    8521           11-AUG-09

1814250   1814250   8521    8521           12-AUG-09

1822300   1822300   8521    8521           18-AUG-09

1814301   1814301   8530    8530           12-AUG-09

1814300   1814300   8530    8530           12-AUG-09

1842250   1842250   8554    8554           08-SEP-09

1888400   1888400   8841    8841           11-JAN-10

1889250   1889250   8841    8841           20-JAN-10

Учитывая данные выше, мне нужно обновить I.date_sub с самым ранним IR.date_sub для этого I.work_id (т.е. для work_id 8521, I.date_sub должен быть 11 августа 2010 г.)

Хотя следующий код работает, мне было интересно, есть ли другой способ обновления таблицы «I». Я не уверен в сортировке поля IR.date_sub.

UPDATE i 
SET i.date_sub = (SELECT min(ir.date_sub) 
FROM ir, d
WHERE ir.doc_id = d.doc_id
AND d.work_id = i.work_id
AND rownum <= 1)

Спасибо.

1 Ответ

2 голосов
/ 18 февраля 2010

ваш запрос обновит столбец i.date_sub первым найденным значением из ir.date_sub из-за предиката rownum <= 1.

Если вы хотите обновить i.date_sub с минимальным значением, просто удалите предикат:

SQL> UPDATE i
  2     SET i.date_sub = (SELECT MIN(ir.date_sub)
  3                         FROM ir, d
  4                        WHERE ir.doc_id = d.doc_id
  5                          AND d.work_id = i.work_id);

4 rows updated

SQL> select * from i;

   WORK_ID DATE_SUB
---------- -----------
      8521 11/08/2009
      8530 12/08/2009
      8554 08/09/2009
      8841 11/01/2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...