• 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流

SQL语句编译后提示缺失右括号

jobli101010 2010-04-22 07:23:52
select TBL_TOPIC.* from TBL_TOPIC
where boardId=1
and topicId not in (select topicId from TBL_TOPIC where boardId=1 and rownum<=1 order by publishTime)
and rownum <20 order by publishTime
提示缺失右括号
把子查询提取查询结果写入not in()中没有问题
select topicId from TBL_TOPIC where boardId=1 and rownum<=1 order by publishTime

查询结果1,2

select TBL_TOPIC.* from TBL_TOPIC
where boardId=1
and topicId not in (1,2)
and rownum <20 order by publishTime
正确

请问怎么回事啊?
...全文
471 点赞 收藏 8
写回复
8 条回复
shancao 2010年04月25日
这个sql即使能运行,效率也会比较低,不知道这个sql是干吗用的?看上去有点莫名其妙,可以把你的用途说一下。
回复 点赞
Leshami 2010年04月24日
[Quote=引用 2 楼 tangren 的回复:]

就语句本身来说,没有问题啊,不过有order by子句使用rownum得不到你想要的,
还有,如果rownum<=1,可以不使用not in了。
[/Quote]
up
回复 点赞
心中的彩虹 2010年04月24日
select TBL_TOPIC.* from TBL_TOPIC
where boardId=1
and topicId not in (select topicId from TBL_TOPIC where boardId=1 and rownum<=1 order by publishTime)
and rownum <20 order by publishTime
--楼上所说不能在子查询中使用order by语句


--本人看了你的语句的意思写了下面的语句.
select * from (select TBL_TOPIC.* ,rownumn rn from TBL_TOPIC
where boardId=1 and rownum <20
order by publishTime) a
where rn between 2 and 19
回复 点赞
JobyGuo 2010年04月24日
子查询执行操作时应该遵循的规则,lz去看一下,其中一条是子查询不能包含order by 子句
回复 点赞
JobyGuo 2010年04月24日
子查询不能包含order by 子句
回复 点赞
ywgoal 2010年04月23日
rownum < 1 了,,还order by啊
回复 点赞
tangren 2010年04月22日
就语句本身来说,没有问题啊,不过有order by子句使用rownum得不到你想要的,
还有,如果rownum<=1,可以不使用not in了。
回复 点赞
iqlife 2010年04月22日
把子查询提取查询结果写入not in()中没有问题
select topicId from TBL_TOPIC where boardId=1 and rownum<=1 order by publishTime
去掉order by publishTime就可以了
回复 点赞
发动态
发帖子
Oracle
创建于2007-09-28

6418

社区成员

5.4w+

社区内容

Oracle开发相关技术讨论
社区公告
暂无公告