用SQL如何查询第几条到第几条之间的数据?想不出来呢,网上的答案都不行的

用SQL中如何查第几条到第几条之间的数据?想不出来呢,网上的答案都不奏效。哪位兄弟姐妹会啊?

这好办,比如查询第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条了啊!这是我们一直在用的方法,思路很清晰、、、追问

不奏效

追答

你的结果是什么、、

追问

出现错误的,在access里就是不行啊

追答

那当然 我用的是sql server,每个数据库的语法不一样,但是思路是一样的,查出前20条,排除前10条,就是11到20条是吧!access我没用过,但是思路就是这样、我想你应该能明白吧!

追问

不奏效哦,从第10条开始查查出了第十条之后的20条,

追答

那我就不大清楚了,反正我们一直这样,一直奏效啊,你想想思路也是对的啊!

追问

帮我想一下啊,你的方法在sql2000我也试过了

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-15
不同的数据库, 写法不一样。 例如我要检索 第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追问

这种写法试过了,查询出在查询区间内的多少条,并没有实现第几条到第几条的数据,你想一下确实是那个结果

追答

你要实现那个 物理行的顺序, 也就是 不按任何字段排序的话. 那么要用 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

本回答被提问者和网友采纳
第2个回答  2011-07-15
select top 20 from table1 where lie1 not in(select top 10 lie1 from table1)
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是不重复的。

第3个回答  2011-07-15
select * from (select *, rownum rowid from tablename where rownum<20)
where rowid >=10
这个原理和分页一样,具体到网上搜分页查询语句
第4个回答  2011-07-16
有个

ROW_NUMBER() OVER() 的函数, 可以取得行数,即 1,2,3,4,5

要 1 --> “第一条” 的话...

估计要去写个函数, 或者 CASE WHEN
相似回答