Oracle SQL - 希望对内部查询返回的每一行执行外部查询

时间:2015-03-20 02:41:02

标签: sql loops oracle11g

这是我的第一个问题:

以下是我要执行的内容:


update SRM_SR_AuditLog
   set MODIFIED_DATE = '1426816800'
     , USER_X = 'Vaibhav via DB'
 where REQUEST_ID in (
    select max(REQUEST_ID) from SRM_SR_AuditLog
     where ORIGINAL_REQUEST_ID = (
        select SYSREQUESTID from SRM_Request
         where REQUEST_NUMBER in (
           'ASREQ0000136770', 'ASREQ0000137758', 'ASREQ0000138174',                       
           'ASREQ0000138175', 'ASREQ0000138176', 'ASREQ0000138177',
           'ASREQ0000138178', 'ASREQ0000138180', 'ASREQ0000138181', 
           'ASREQ0000138238', 'ASREQ0000138319', 'ASREQ0000138349', 
           'ASREQ0000139486', 'ASREQ0000140292', 'ASREQ0000140295', 
           'ASREQ0000140299', 'ASREQ0000140334', 'ASREQ0000140403', 
           'ASREQ0000140637', 'ASREQ0000140692' )
    )
);

我知道以下不会起作用:

ORIGINAL_REQUEST_ID = (
  select SYSREQUESTID from SRM_Request where REQUEST_NUMBER in

因为查询(select SYSREQUESTID from SRM_Request** where REQUEST_NUMBER = "XYZ")将返回更多一条记录,但对于SRM_Request中的每条记录,表“SRM_SR_AuditLog”中有多条记录。我希望“SRM_ST_Audit”表中针对上述查询返回的每个SYSREQUESTID的最新/最大请求ID引用。

希望这是有道理的。

我想为内部查询返回的每个值执行外部查询。 我该怎么办呢?

谢谢堆 VAB

2 个答案:

答案 0 :(得分:0)

如果我理解正确,那么我认为你想要的是:

update SRM_SR_AuditLog set
MODIFIED_DATE = '1426816800',
USER_X = 'Vaibhav via DB' where
REQUEST_ID in
(
  select max(REQUEST_ID) from SRM_SR_AuditLog where
  ORIGINAL_REQUEST_ID IN
  (
    select SYSREQUESTID from SRM_Request where REQUEST_NUMBER in
    (
    'ASREQ0000136770', 'ASREQ0000137758', 'ASREQ0000138174', 'ASREQ0000138175', 'ASREQ0000138176', 'ASREQ0000138177', 'ASREQ0000138178', 'ASREQ0000138180', 'ASREQ0000138181', 'ASREQ0000138238', 'ASREQ0000138319', 'ASREQ0000138349', 'ASREQ0000139486', 'ASREQ0000140292', 'ASREQ0000140295', 'ASREQ0000140299', 'ASREQ0000140334', 'ASREQ0000140403', 'ASREQ0000140637', 'ASREQ0000140692'
    )
  )
  group by ORIGINAL_REQUEST_ID
)

这将在SRM_Request中找到给定请求号的所有请求ID;查找SRM_SR_AuditLog中原始请求ID位于这些请求ID中的所有行;找到每个唯一原始请求ID的最大区域ID;并使用这些请求ID更新行。

答案 1 :(得分:0)

感谢Dave的回复。

SRM_Request与SRM_SR_AuditLog表有一对多的映射。

更新为" IN"将扫描所有记录,并找到一个max(REQUEST_ID)的记录。

从SRM_Request中选择SYSREQUESTID,其中REQUEST_NUMBER在 ( ' ASREQ0000136770',' ASREQ0000137758',' ASREQ0000138174',' ASREQ0000138175',' ASREQ0000138176',' ASREQ0000138177& #39;,' ASREQ0000138178',' ASREQ0000138180',' ASREQ0000138181',' ASREQ0000138238',' ASREQ0000138319',& #39; ASREQ0000138349',' ASREQ0000139486',' ASREQ0000140292',' ASREQ0000140295',' ASREQ0000140299',' ASREQ0000140334&# 39;,' ASREQ0000140403',' ASREQ0000140637',' ASREQ0000140692'   )

这将返回20个引用 对于这20个引用中的每一个 - 我希望通过max(REQUEST_ID)从SRM_SR_AuditLog引用20个引用。

"从SRM_SR_AuditLog中选择max(REQUEST_ID),其中"

" IN"或" ="没有帮助。