【问题标题】:oracle sql update with sub selectoracle sql更新与子选择
【发布时间】:2016-09-28 09:10:35
【问题描述】:

我想更新表格最后 2 行的 1 个字段。所以我需要一个子查询。 两个 sql 都有效 - 我如何组合这 2 个 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);

结果:

费勒贝里希特 - SQL-Fehler: ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号” *原因:
*行动:

谢谢你帮助我! 迈克尔

【问题讨论】:

  • 我认为 ORDER BY ... 有问题?!?
  • 请发布一些示例数据和期望的结果;另外,与其添加 cmets,不如编辑您的问题是一种更好的方法;这样问题就完整了,一目了然,无需阅读 cmets 即可给出答案
  • 您已经在使用子查询。你实际上想做什么。您是否正在寻找一些连接或相关查询
  • 我想将最后 2 行,字段 M2 更新为新值 '8,4'。但是我的 UPDATE 和 SELECT 组合不起作用

标签: oracle


【解决方案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

【讨论】:

  • 太棒了!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2018-09-01
  • 1970-01-01
  • 2018-07-23
  • 2012-04-09
  • 1970-01-01
相关资源
最近更新 更多