SQL语句写法:如何一次性从百万条记录中找到希望的数据?
数据库为ACCESS,表名为tables,结构和字段名如下:字段1字段2字段3zd1zd2texts1000020000文字一2100030000文字二310004000...
数据库为ACCESS,表名为tables,结构和字段名如下:
字段1 字段2 字段3
zd1 zd2 texts
10000 20000 文字一
21000 30000 文字二
31000 40000 文字三
41000 50000 文字四
51000 60000 文字五
61000 70000 文字六
...
手头有如下数据需查询:A=23456,13567,67543...(无序数,但数据库中总有大于这些数的列)
请问:如何不用循环的方法一次性查出对应的“文字几”,并按数据A所对应的顺序列出?
(不用循环的方法,循环查询对于百万条数据中查找太耗资源了)
请高手不吝指教。谢谢。
a=23456,13567,67543...这是个数组。
一次性打开数据库,不用循环,但可进行下面查询:
21000 < 23456 < 30000 找出“文字二”
10000 < 13567 < 20000 找出“文字一”
31000 40000 文字三
41000 50000 文字四
51000 60000 文字五
61000 < 67543 <70000 找出“文字六”
并按23456,13567,67543的顺序批量列出“文字二”“文字一”“文字三”
求asp的sql语句。 展开
字段1 字段2 字段3
zd1 zd2 texts
10000 20000 文字一
21000 30000 文字二
31000 40000 文字三
41000 50000 文字四
51000 60000 文字五
61000 70000 文字六
...
手头有如下数据需查询:A=23456,13567,67543...(无序数,但数据库中总有大于这些数的列)
请问:如何不用循环的方法一次性查出对应的“文字几”,并按数据A所对应的顺序列出?
(不用循环的方法,循环查询对于百万条数据中查找太耗资源了)
请高手不吝指教。谢谢。
a=23456,13567,67543...这是个数组。
一次性打开数据库,不用循环,但可进行下面查询:
21000 < 23456 < 30000 找出“文字二”
10000 < 13567 < 20000 找出“文字一”
31000 40000 文字三
41000 50000 文字四
51000 60000 文字五
61000 < 67543 <70000 找出“文字六”
并按23456,13567,67543的顺序批量列出“文字二”“文字一”“文字三”
求asp的sql语句。 展开
14个回答
展开全部
首先在zd1和zd2上建立索引
Select [texts] from [tables] where (zd1<23456 and zd2>23456) or (zd1< 13567 and zd2>13567) or (zd1<67543 and zd2>67543) ......
上面这样只能在输出的时候按顺序对比排序
Select [texts] from [tables] where (zd1<23456 and zd2>23456)
union
Select [texts] from [tables] where (zd1<13567 and zd2>13567 )
union
Select [texts] from [tables] where (zd1<67543 and zd2>67543)
这样可以直接按顺序输出.但不知道效率怎样..
Select [texts] from [tables] where (zd1<23456 and zd2>23456) or (zd1< 13567 and zd2>13567) or (zd1<67543 and zd2>67543) ......
上面这样只能在输出的时候按顺序对比排序
Select [texts] from [tables] where (zd1<23456 and zd2>23456)
union
Select [texts] from [tables] where (zd1<13567 and zd2>13567 )
union
Select [texts] from [tables] where (zd1<67543 and zd2>67543)
这样可以直接按顺序输出.但不知道效率怎样..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sql="select * from tables where zd1 in ("&A&")" '先把这些数据全找出来
rs.open sql,conn,1,1
arr=Split(A,",")
for each num in arr '再按A里的顺序显示
rs.movefirst
do
if rs("zd1")=cint(num) then
response.write rs("zd1")&"对应的文字是"&rs("texts")
Exit Do
end if
loop
next
rs.open sql,conn,1,1
arr=Split(A,",")
for each num in arr '再按A里的顺序显示
rs.movefirst
do
if rs("zd1")=cint(num) then
response.write rs("zd1")&"对应的文字是"&rs("texts")
Exit Do
end if
loop
next
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种方法已经试过了,可以的
方法一,(zd2大于等于23456的按zd2升序第一条记录)
SELECT TOP 1 *
FROM tables
WHERE zd2 >= 23456
ORDER BY zd2
方法二,(zd1小于等于23456的按zd1降序第一条记录)
SELECT TOP 1 *
FROM tables
WHERE zd1 <= 23456
ORDER BY zd1 DESC
方法一,(zd2大于等于23456的按zd2升序第一条记录)
SELECT TOP 1 *
FROM tables
WHERE zd2 >= 23456
ORDER BY zd2
方法二,(zd1小于等于23456的按zd1降序第一条记录)
SELECT TOP 1 *
FROM tables
WHERE zd1 <= 23456
ORDER BY zd1 DESC
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从publish 表中取出第 n 条到第 m 条的记录:
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN
(SELECT TOP n-1 id
FROM publish))
SELECT TOP 页大小 *
FROM Table1
WHERE not exists
(select * from (select top (页大小*页数) * from table1 order by id) b where b.id=a.id )
order by id
SELECT TOP m-n+1 *
FROM publish
WHERE (id NOT IN
(SELECT TOP n-1 id
FROM publish))
SELECT TOP 页大小 *
FROM Table1
WHERE not exists
(select * from (select top (页大小*页数) * from table1 order by id) b where b.id=a.id )
order by id
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2006-11-25
展开全部
可惜我也不会,只能帮顶。
楼主的意思应该是一次性从百万条数据库中(形式如下)
10000 20000 文字一
21000 30000 文字二
31000 40000 文字三
41000 50000 文字四
51000 60000 文字五
61000 70000 文字六
查询到大于或等于下面这个数组的单个数的记录啊:
23456,13567,67543...
楼主的意思应该是一次性从百万条数据库中(形式如下)
10000 20000 文字一
21000 30000 文字二
31000 40000 文字三
41000 50000 文字四
51000 60000 文字五
61000 70000 文字六
查询到大于或等于下面这个数组的单个数的记录啊:
23456,13567,67543...
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |