下面这条SQL语句表名和列名违反相应的规则吗

来源:百度知道 编辑:UC知道 时间:2024/05/16 10:08:17
SELECT * FROM tb_info info WHERE (info.info_type = 2) AND (info.info_state = '1') AND (info.info_payfor = '0') and (info.ROWNUM<=3) AND (info.info_date < (SELECT MIN(info_date) FROM (SELECT info_date FROM tb_info WHERE (info_type = info.info_type) AND (info_state = '1') AND (info_payfor = '0') and (ROWNUM<=3) ORDER BY info_date DESC) mindate)) ORDER BY info.info_date DESC
这条SQL语句,系统一直报“无效的用户.表.列,表.列,或列规格”异常,都要崩溃了,求求各位高手帮我看一下,指教指教,谢了!!!我是新注册的,所以,没有悬赏分,恳求各位高手一定要帮帮我呀,我将万分感激!!!

一楼的意思是对的,不过是没有表达清楚吧

在嵌套查询的子查询里面确实不能含有ORDER BY子句的
ORDER BY子句一定在最外层的最后面

2楼的~你没有看题哦~1楼说的没错的,表达错误~

-------------------9-8 10:18,先对【wyehua】说抱歉,字打上去就知道错了,但是一直在查资料,调试,上班,所以没来得及更新,现在把完整的回答贴上来。

1,单独的条件语句建议不要加括号,要不复杂查询,而且含很多嵌套语句的话,看着会很晕的,你看看我这样写是不是看起来要舒服很多。

2,info.ROWNUM这种写法是错误的,会报“无效的用户.表.列,表.列,或列规格”错误,rownum并不属于info表的列,他只存在于内存中。不同的嵌套中rownum不用加表.rownum标识符,以下查询测试可行select * from tt where ROWNUM <5 and id in (select a.id from tt a where rownum <4) order by id;好像相同的rownum列并没有冲突,个人理解为rownum是在每次子查询或者嵌套查询中都会生成的,在读取完后就销毁了,也就是说任何一个时间内存中都只存在一个rownum列。当然我上面的查询不排除是特殊情况。各位可以都测试下。测试出真知哈。查资料得知oracle中明确规定【rownum不能以任何基表的名称作为前缀】,另外理解rownum的话,rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。例如下面两种用可以用rownum的变通方式实现分页:
select * from (select rownum row_num,month,sell
from (select month,sell from sale group by month,sell))
where row_num between 5 and 9;【网友评论】

select dmp.row_num,dmp.REQUIRE