加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – ORA-00907缺少右括号问题 – 通过内部插入查询选择顺序

发布时间:2021-01-28 16:35:13 所属栏目:MsSql教程 来源:网络整理
导读:我试图插入一个表,它为一列使用一个select语句.以下是我的查询的说明. INSERT INTO MY_TBL (MY_COL1,MY_COL2)VALUES ((SELECT DATA FROM FIR_TABL WHERE ID = 1 AND ROWNUM = 1 ORDER BY CREATED_ON DESC),1 ); 它抛出ORA-00907缺少右括号.如果我从中删除ORDE

我试图插入一个表,它为一列使用一个select语句.以下是我的查询的说明.

INSERT INTO MY_TBL (MY_COL1,MY_COL2)
VALUES (
(SELECT DATA FROM FIR_TABL WHERE ID = 1 AND ROWNUM = 1 ORDER BY CREATED_ON DESC),1 
);

它抛出ORA-00907缺少右括号.如果我从中删除ORDER BY,它会按预期工作.但我需要订购它.请澄清.

提前致谢.

解决方法

当前的答案都忽略了在同一查询中使用order by和rownum本身就很危险的事实.绝对不能保证您将获得所需的数据.如果要从有序查询中获取第一行,则必须使用子查询:
insert into my_tbl ( col1,col2 )
select data,'more data'
  from ( select data
           from fir_tabl
          where id = 1
          order by created_on desc )
 where rownum = 1
       ;

您也可以使用像rank这样的函数来按照您想要的方法对数据进行排序,但是如果您有两个created_on日期相同,则最终会得到2个rnk = 1的值.

insert into my_tbl ( col1,'more data'
  from ( select data,rank() over ( order by created_on desc ) as rnk
           from fir_tabl
          where id = 1)
 where rnk = 1
       ;

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读