黑马程序员技术交流社区

标题: sql语句找找哪错了?????为什么错了 [打印本页]

作者: 孙琦    时间: 2012-2-28 21:50
标题: sql语句找找哪错了?????为什么错了
本帖最后由 孙琦 于 2012-2-28 21:52 编辑

select top 3 * from Teacher where id not in(select top (count(*)-3) id from Teacher )
作者: 赵国梁    时间: 2012-2-28 21:58
count(*)是聚合函数结构是一条和id能查出来不确定条数的字段是不能一起查询的。
作者: 孙琦    时间: 2012-2-28 22:02
本帖最后由 孙琦 于 2012-2-28 22:04 编辑
赵国梁 发表于 2012-2-28 21:58
count(*)是聚合函数结构是一条和id能查出来不确定条数的字段是不能一起查询的。 ...


当你不知道一个表中有多少条数据时,让你取出最后的三条或者几条,count(*) - 3不能用,你会怎么做?不考虑分页,
再说你就不是不考虑聚合函数,select top 7-3 * from Teacher,这样也是不行的
作者: 叶彦召    时间: 2012-2-28 22:13
把表倒过来再去前三条top (3)

作者: 孙琦    时间: 2012-2-28 22:21
本帖最后由 孙琦 于 2012-2-28 22:22 编辑
叶彦召 发表于 2012-2-28 22:13
把表倒过来再去前三条top (3)


难道仁兄有把表倒过来的功能,不要select top 3 from 【表名】 order by desc ,这样取出的不是最后三条
作者: 叶彦召    时间: 2012-2-29 00:32
当然要了,这样才不会出错嘛,避免了count(*) - 3 就不会错了
另外:select top (7-3) * from Teacher也是可以的(加括号)
作者: 孙琦    时间: 2012-3-1 22:24
擦,搞定了,分享下
--11.1取出这个表中的最后n条数据,并按倒序输出...
        Sql语句:
        select top 3 * from[表名] where id not in(select id from[表名] where id<=((select count(*) from [表名])-n)) order by [字段名] desc
   
        --11.2取出这个表中的中间n条数据的前m条,并按倒序输出...先取出在排序。
                select * from [表名]
                where id in
                {
                        select top m * from[表名] where id not in(select id from[表名] where id<=((select count(*) from [表名])-n))
                )
                order by [字段名] desc
               
        --11.3取出这个表中的中间n条数据的前m条,并按倒序输出...先排序在取出
                select top m * from[表名] where id not in(select id from[表名] where id<=((select count(*) from [表名])-n)) order by [字段名] desc




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2