用SQL如何查询第几条到第几条之间的数据?想不出来呢,网上的答案都不行的
6个回答
2011-07-15
展开全部
这好办,比如查询第10条到第20条数据,表是table1,列是lie1,lie2,那就是
select top 20 from table1 where lie1 not in(select top 10 lie1 from table1)
括号里是查出前10条数据,然后查出所以的前20条数据,排除前10条,就是第10条到第20条了啊!这是我们一直在用的方法,思路很清晰、、、
select top 20 from table1 where lie1 not in(select top 10 lie1 from table1)
括号里是查出前10条数据,然后查出所以的前20条数据,排除前10条,就是第10条到第20条了啊!这是我们一直在用的方法,思路很清晰、、、
更多追问追答
追问
不奏效
追答
你的结果是什么、、
展开全部
不同的数据库, 写法不一样。 例如我要检索 第11条到第20条
MySQL 数据库的最简单
SELECT * FROM 表 LIMIT 11, 10
SQL Server 的稍微折腾一些
SELECT
TOP 10
top20.*
FROM
(
SELECT
TOP 20
*
FROM
表
ORDER BY
排序字段 DESC
) AS top20
ORDER BY
top20.排序字段 ASC
MySQL 数据库的最简单
SELECT * FROM 表 LIMIT 11, 10
SQL Server 的稍微折腾一些
SELECT
TOP 10
top20.*
FROM
(
SELECT
TOP 20
*
FROM
表
ORDER BY
排序字段 DESC
) AS top20
ORDER BY
top20.排序字段 ASC
追问
这种写法试过了,查询出在查询区间内的多少条,并没有实现第几条到第几条的数据,你想一下确实是那个结果
追答
你要实现那个 物理行的顺序, 也就是 不按任何字段排序的话. 那么要用 RowNumber 了。
如果你的数据库, 还是 Access,或者 SQL Server 2000 那就没办法了。
CREATE TABLE #temp (
id INT
);
GO
INSERT INTO #temp
SELECT 1 UNION ALL
SELECT 3 UNION ALL
SELECT 5 UNION ALL
SELECT 7 UNION ALL
SELECT 9 UNION ALL
SELECT 2 UNION ALL
SELECT 4 UNION ALL
SELECT 6 UNION ALL
SELECT 8 UNION ALL
SELECT 0 UNION ALL
SELECT 11 UNION ALL
SELECT 13 UNION ALL
SELECT 15 UNION ALL
SELECT 17 UNION ALL
SELECT 19 UNION ALL
SELECT 12 UNION ALL
SELECT 14 UNION ALL
SELECT 16 UNION ALL
SELECT 18 UNION ALL
SELECT 10 UNION ALL
SELECT 21 UNION ALL
SELECT 23 UNION ALL
SELECT 25 UNION ALL
SELECT 27 UNION ALL
SELECT 29 UNION ALL
SELECT 22 UNION ALL
SELECT 24 UNION ALL
SELECT 26 UNION ALL
SELECT 28 UNION ALL
SELECT 20
GO
SELECT
id
FROM
(
SELECT
row_number() OVER (order by (select 1)) AS no,
id
FROM #temp
) t
WHERE
no >= 11 AND no <=20
GO
id
-----------
11
13
15
17
19
12
14
16
18
10
(10 行受影响)
下面这种写法,速度上慢点,但是结果和上面的一样。
SELECT
top 10
*
FROM
#temp
WHERE
id NOT IN (SELECT top 10 id FROM #temp)
GO
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select top 20 from table1 where lie1 not in(select top 10 lie1 from table1)
SQL SERVER是这样写。不知道你是什么数据库。不过原理都是一样的。先查出大的集合,然后排除掉其中一部分,剩下的就是你要的了
SQL SERVER是这样写。不知道你是什么数据库。不过原理都是一样的。先查出大的集合,然后排除掉其中一部分,剩下的就是你要的了
追问
不奏效哦,从第10条开始查查出了第十条之后的20条,
追答
假设你的排序字段是lie1
select top 20 from table1 where lie1 not in(select top 10 lie1 from table1 order by lie1) order by lie1
而且lie1是不重复的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from (select *, rownum rowid from tablename where rownum<20)
where rowid >=10
这个原理和分页一样,具体到网上搜分页查询语句
where rowid >=10
这个原理和分页一样,具体到网上搜分页查询语句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个
ROW_NUMBER() OVER() 的函数, 可以取得行数,即 1,2,3,4,5
要 1 --> “第一条” 的话...
估计要去写个函数, 或者 CASE WHEN
ROW_NUMBER() OVER() 的函数, 可以取得行数,即 1,2,3,4,5
要 1 --> “第一条” 的话...
估计要去写个函数, 或者 CASE WHEN
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询