使用另一个表中最早的日期更新表

时间:2010-02-18 09:05:36

标签: sql oracle sql-update

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

鉴于上述数据,我需要使用最早的IR.date_sub为I.work_id更新I.date_sub(即对于work_id 8521,I.date_sub应为2010年8月11日)。

虽然以下代码有效,但我想知道是否有另一种更新“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 个答案:

答案 0 :(得分:2)

由于谓词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