2016-09-28 78 views
0

我想更新表中最后2行的1个字段。所以我需要一个子查询。 这两个sql的作品 - 我怎么能结合这2个SQL命令?oracle sql更新与子选择

选择命令(的作品,最后2行):

SELECT * FROM (select * from mytable WHERE id='62741' ORDER BY lfdnr DESC) mytable2 WHERE rownum <= 2; 

结果:(?,存在在,合并)

LFDNR ID     M2    
361782 62741    8,5    
361774 62741    8,6  

更新

UPDATE mytable set m2='8,4' WHERE EXISTS (select * from mytable WHERE id='62741' and rownum <=2 ORDER BY lfdnr DESC); 

结果:

Fehlerbericht - SQL-Fehler:ORA-00907:缺少右括号 00907. 00000 - “缺少右括号” *原因:
*操作:

谢谢你对我的帮助! 迈克尔

+0

我觉得这是一个问题与ORDER BY ...?!? – user1562809

+2

请张贴一些样本数据和期望的结果;同样,不要添加评论,编辑你的问题是一个更好的方法;通过这种方式,问题将完整且不言自明,无需阅读评论以给出答案 – Aleksej

+0

您已使用子查询。你真正想做什么。您是否正在寻找一些连接或相关查询 – XING

回答

1

你可以使用rowid虚列:

update mytable set m2 = '8, 4' 
    where rowid in (select rowid 
    from (
     select rowid, row_number() over (order by lfdnr desc) rn 
     from mytable where id = '62741') 
    where rn <= 2) 

测试:

create table mytable (id varchar2(5), lfdnr number(5), m2 varchar2(10)); 
insert into mytable values ('62705', 1, 'abc'); 
insert into mytable values ('62741', 2, 'xyz'); 
insert into mytable values ('62741', 3, 'qwe'); 
insert into mytable values ('62741', 4, 'rty'); 

ID LFDNR M2 
----- ------ ---------- 
62705  1 abc 
62741  2 xyz 
62741  3 8, 4 
62741  4 8, 4 
+0

太棒了!谢谢。 – user1562809