请教查询的问题
我用这个语句查询前10条记录“select top 10 id,newtitle from NewTable1 order by id desc”,不知道获得11-20条记录的语句该怎么写? 问题点数:20、回复次数:15Top
1 楼kssys()回复于 2006-06-03 09:31:36 得分 0
select top 20 id,newtitle
from NewTable1
WHERE id+'/'+newtitle NOT IN (select top 10 id+'/'+newtitle from NewTable1 order by id desc)
order by id descTop
2 楼anthit()回复于 2006-06-03 09:33:44 得分 0
楼上正解,Top
3 楼liujingxiong()回复于 2006-06-03 09:57:38 得分 0
如果我需要带参数取出一个范围呢?比如n1-n2,n1=11 n2=20 或者 n1=3 n2=200Top
4 楼kssys()回复于 2006-06-03 10:10:57 得分 0
那么继续加条件即可。
SELECT TOP 20 ID,NewTitle
FROM NewTable1
WHERE yourWhere AND ID+'/'+NewTitle NOT IN
(SELECT TOP 10 ID+'/'+NewTitle FROM NewTable1 WHERE yourWhere ORDER BY ID DESC)
ORDER BY ID DESCTop
5 楼wang355()回复于 2006-06-03 10:17:26 得分 0
同意楼上Top
6 楼lshlfyf()回复于 2006-06-03 10:28:06 得分 0
不错,学习Top
7 楼liujingxiong()回复于 2006-06-03 11:42:17 得分 0
select top 9 编号,类别,标题,日期 from News where 类别='最新公告' and 编号 not in (select top 7 编号 from News where 类别='最新公告' order by 编号 asc) order by 编号 asc
输出
8
9
10
11
12
13
14
15
不是应该只输出这个吗?
8
9
Top
8 楼liujingxiong()回复于 2006-06-03 11:44:57 得分 0
select top 9 编号,类别,标题,日期 from News where 类别='最新公告' and 编号+'/'+类别+'/'+标题+'/'+日期 not in (select top 7 编号,类别,标题,日期 from News where 类别='最新公告' order by 编号 asc) order by 编号 asc
显示:
Exception Details: System.Data.OleDb.OleDbException: 所编写的一个子查询可在不在主查询的 FROM 子句中使用的 EXISTS 保留字的情况下返回多个字段。 修改子查询的 SELECT 语句以只要求返回一个字段。
Top
9 楼kssys()回复于 2006-06-03 11:55:53 得分 0
select top 9 编号,类别,标题,日期 from News where 类别='最新公告' and 编号+'/'+类别+'/'+标题+'/'+日期 not in (select top 7 编号+'/'+类别+'/'+标题+'/'+日期 from News where 类别='最新公告' order by 编号 asc) order by 编号 ascTop
10 楼liujingxiong()回复于 2006-06-03 12:32:34 得分 0
select top 9 编号,类别,标题,日期 from News where 类别='最新公告' and 编号+'/'+类别+'/'+标题+'/'+日期 not in (select top 7 编号+'/'+类别+'/'+标题+'/'+日期 from News where 类别='最新公告' order by 编号 asc) order by 编号 asc
输出:Exception Details: System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。Top
11 楼liujingxiong()回复于 2006-06-03 12:33:53 得分 0
编号是自动编号的长整型,其它的都是文本。Top
12 楼kssys()回复于 2006-06-03 12:42:24 得分 0
select top 9 编号,类别,标题,日期 from News where 类别='最新公告' and CAST(编号 AS VarChar(15))+'/'+类别+'/'+标题+'/'+日期 not in (select top 7 CAST(编号 AS VarChar(15))+'/'+类别+'/'+标题+'/'+日期 from News where 类别='最新公告' order by 编号 asc) order by 编号 ascTop
13 楼liujingxiong()回复于 2006-06-03 12:45:28 得分 0
select top 9 编号,类别,标题,日期 from News where 类别='最新公告' and CAST(编号 AS VarChar(15))+'/'+类别+'/'+标题+'/'+日期 not in (select top 7 CAST(编号 AS VarChar(15))+'/'+类别+'/'+标题+'/'+日期 from News where 类别='最新公告' order by 编号 asc) order by 编号 asc
输出:Exception Details: System.Data.OleDb.OleDbException: IErrorInfo.GetDescription failed with E_FAIL(0x80004005).Top
14 楼kssys()回复于 2006-06-03 13:30:41 得分 20
做完事情了。
我用这个语句查询前10条记录“select top 10 id,newtitle from NewTable1 order by id desc”,不知道获得11-20条记录的语句该怎么写?
你的编号是维一的吗?如果是,这样写:
SELECT TOP 10 ID,NewTitle
FROM NewTable1
WHERE id NOT IN (SELECT TOP 10 ID FROM NewTable1 ORDER BY ID DESC)
ORDER BY ID DESC
之前写成Top 20是错的。
另,你的消息中问列之间为什么要用'/'隔开,是为了安全考虑,如:
列A 列B
A1 B
A 1B
结果将是相同的。
Top
15 楼liujingxiong()回复于 2006-06-03 14:56:41 得分 0
谢谢kssys指点。Top




