使用另一个表中的最早日期更新表
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)
谢谢。
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
Given the data above, I need to update I.date_sub with the earliest IR.date_sub for that I.work_id (i.e. for work_id 8521, I.date_sub should be 11-AUG-2010).
While the following code works, I was wondering if there's another way of updating the "I" table. I'm not confident with the sorting of the IR.date_sub field.
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)
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于谓词
rownum <= 1
,您的查询将使用从ir.date_sub
找到的第一个值更新i.date_sub
列。如果您想使用最小值更新
i.date_sub
,只需删除您的谓词:your query will update the
i.date_sub
column with the first value it finds fromir.date_sub
because of the predicaterownum <= 1
.If you want to update
i.date_sub
with the minimum value just remove your predicate: