2012-08-15 91 views
1

如何将a.age和b.age更新为32,以获得通过以下查询获得的所有结果。temp列是“CID”,如下面的示例所示使用临时列在Oracle表中更新条目

select * 
    from (SELECT ROW_NUMBER() 
       OVER (PARTITION BY CUST_NAME ORDER BY CUST_NAME) AS CID,CUST_NAME,AGE,CITY,COLUMNB 
      FROM (select CUST_NAME,AGE,CITY,COLUMNB 
        from SOMETABLE 
       where date = '26-jULY-2012'))a 
    RIGHT join (select * 
       from (SELECT ROW_NUMBER() 
          OVER (PARTITION BY CUST_NAME ORDER BY CUST_NAME) AS CID,CUST_NAME,AGE,CITY,COLUMNB 
         FROM (select CUST_NAME,AGE,CITY,COLUMNB 
           from SOMETABLE2 
           where date = '26-jULY-2012')))b 
     on a.CID=b.CID 
    and a.CUST_NAME=b.CUST_NAME 
ORDER BY a.CUST_NAME,A.CID,a.COLUMNB; 
+0

_Where_你要更新吗? – Ben 2012-08-15 15:43:09

+0

在同一个表中检索它们(例如:a.age来自SOMETABLE) – 2012-08-15 15:47:15

回答

0
update sometable 
set age = 32 
where cid in (
select a.cid 
    from (SELECT ROW_NUMBER() 
       OVER (PARTITION BY CUST_NAME ORDER BY CUST_NAME) AS CID,CUST_NAME,AGE,CITY,COLUMNB 
      FROM (select CUST_NAME,AGE,CITY,COLUMNB 
        from SOMETABLE 
       where date = '26-jULY-2012'))a 
    RIGHT join (select * 
       from (SELECT ROW_NUMBER() 
          OVER (PARTITION BY CUST_NAME ORDER BY CUST_NAME) AS CID,CUST_NAME,AGE,CITY,COLUMNB 
         FROM (select CUST_NAME,AGE,CITY,COLUMNB 
           from SOMETABLE2 
           where date = '26-jULY-2012')))b 
     on a.CID=b.CID 
    and a.CUST_NAME=b.CUST_NAME 
) 
; 




update sometable2 
set age = 32 
where cid in (
select b.cid 
    from (SELECT ROW_NUMBER() 
       OVER (PARTITION BY CUST_NAME ORDER BY CUST_NAME) AS CID,CUST_NAME,AGE,CITY,COLUMNB 
      FROM (select CUST_NAME,AGE,CITY,COLUMNB 
        from SOMETABLE 
       where date = '26-jULY-2012'))a 
    RIGHT join (select * 
       from (SELECT ROW_NUMBER() 
          OVER (PARTITION BY CUST_NAME ORDER BY CUST_NAME) AS CID,CUST_NAME,AGE,CITY,COLUMNB 
         FROM (select CUST_NAME,AGE,CITY,COLUMNB 
           from SOMETABLE2 
           where date = '26-jULY-2012')))b 
     on a.CID=b.CID 
    and a.CUST_NAME=b.CUST_NAME 
) 
; 
+0

@ schurik-CID是一个临时列,它不存在于SOMETABLE或SOMETABLE2中,因此您的解决方案将不起作用 – 2012-08-15 17:59:43

+0

@HaranMurthy什么是sometable和sometable2的主键? – schurik 2012-08-16 08:19:19