用另一个表中的最早日期更新表
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 <= 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
【讨论】:
以上是关于用另一个表中的最早日期更新表的主要内容,如果未能解决你的问题,请参考以下文章