某sql查询可返回100个结果,我想取出指定几个位置(比如第3,5,8,10,12)的结果,该怎么写?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某sql查询可返回100个结果,我想取出指定几个位置(比如第3,5,8,10,12)的结果,该怎么写?相关的知识,希望对你有一定的参考价值。
我只能想到对每个位置用limit [num], 1执行一次查询,然后把几次查询的结果合起来,但是这样的话如果指定位置数很多,就要执行很多次查询,效率低下,有没有更好的方法呢?
-- 测试表.CREATE TABLE test_rownum (
code varchar(6),
val varchar(6)
);
-- 我只模拟10行测试数据.
INSERT INTO test_rownum
SELECT '000001', 'A' UNION ALL
SELECT '000002', 'B' UNION ALL
SELECT '000003', 'C' UNION ALL
SELECT '000004', 'D' UNION ALL
SELECT '000005', 'E' UNION ALL
SELECT '000006', 'F' UNION ALL
SELECT '000007', 'G' UNION ALL
SELECT '000008', 'H' UNION ALL
SELECT '000009', 'J' UNION ALL
SELECT '000010', 'J';
-- 我查询第 3,5,8,10 行
SELECT
code, val
FROM
(
SELECT
@rownum:=@rownum+1 AS NO,
code, val
FROM
test_rownum,
(SELECT @rownum:=0) r
) subQuery
WHERE
NO IN (3,5,8,10);
+--------+------+
| code | val |
+--------+------+
| 000003 | C |
| 000005 | E |
| 000008 | H |
| 000010 | J |
+--------+------+
4 rows in set (0.00 sec)
mysql 4.1.10a 下测试通过。 参考技术A 你使用limit 本身查询出的结果就是随机性的 100条数据,
建议你查询出结果后,将结果插入到一个临时表中,再临时表中设置字段 方便取出你需要的列
每次查询之前 先清理掉临时表 ,然后再进行查询 参考技术B 我的建议是,你将查询结果直接赋值给DataTable对象,记得是用Fill方法可以做到,这样你就可以随意取得任意一行的任意一个字段了。而且查询后就可以关闭连接,不影响之后的使用。 参考技术C
MS SQL Server的
(
Select row_number() over(order by 排序字段) As rowid ,* From 表名
) as T
Where rowid in (3,5,8,10,12) 参考技术D select * from (select t.*,rownum as bj from t) b where bj in (3,5,8,10,12) 第5个回答 2013-06-08 你用游标,进行循环的提取
SQL 限制查询结果
MySQL
# 查询前5条数据,第一个参数是起始位置(从头开始可省略,从0开始不是1),第二个参数是返回的数据条数
SELECT * FROM book_table LIMIT 5;
SELECT * FROM book_table LIMIT 0,5;
# 查询从第3条开始的5条数据,第二种offset是指起始位置,从0开始算
SELECT * FROM book_table LIMIT 2,5;
SELECT * FROM book_table LIMIT 5 OFFSET 2;
SQL Server
-- 查询前5条数据
SELECT TOP 5 * FROM book_table;
Oracle
-- 查询前5条数据
SELECT * FROM book_table where ROWNUM <= 5;
以上是关于某sql查询可返回100个结果,我想取出指定几个位置(比如第3,5,8,10,12)的结果,该怎么写?的主要内容,如果未能解决你的问题,请参考以下文章