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

Posted

技术标签:

【中文标题】用另一个表中的最早日期更新表【英文标题】:Updating table with the earliest date from another table 【发布时间】:2010-02-18 09:05:36 【问题描述】:
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.work_id 的最早 IR.date_sub 更新 I.date_sub(即对于 work_id 8521,I.date_sub 应该是 11-AUG-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)

谢谢。

【问题讨论】:

糟糕,对不起。由于 Min 功能,我总是会得到最早的日期。还是谢谢。 您应该在更新语句中取出“rownum”。 【参考方案1】:

由于谓词rownum &lt;= 1,您的查询将使用从ir.date_sub 中找到的第一个值更新i.date_sub 列。

如果您想用最小值更新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

【讨论】:

以上是关于用另一个表中的最早日期更新表的主要内容,如果未能解决你的问题,请参考以下文章

用另一个表中的数据更新一个表[重复]

用另一个表中的值更新一个表

用另一个表中的随机条目更新表的列

MYSQL:我想用另一个表中的值更新表中的所有行,其中第一个表中的值等于第二个表

用另一个表中的值更新一个表

Netezza - 用另一张表中的最大数据更新一张表