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)
感谢。
答案 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