超高难度:关联的两个表的SQL分页问题。

大叔obnijeh 2008-10-25 09:24:02
CREATE TABLE contactGroupsend
(
contactGroupsendId int IDENTITY(1,1) primary key, --主键 自动增加
contactId int , --联系人ID
contactGroupName varchar(100), --组的名称 唯一
userLdapId Varchar(100) --登陆名,
)

CREATE TABLE Contact
(
contactId int IDENTITY(1,1) primary key, --ID主键
contactName varchar(100), --姓名
contactTel varchar(100), --手机号码
contactCompanyTel varchar(100), --公司电话
contactEmail varchar(100), --电子邮箱
contactChatNumber varchar(100), --聊天工具号码
contactMark varchar(1000), --备注
userLdapId Varchar(100) --用户名或用户ID
)
GO
---
查询Contact中的信息,条件是:
select contactId from Contact where contactId in( select contactId from contactGroupsend where userLdapId='aaa' and contactGroupName='同事')
---
请考虑一个问题,如果是下面这种做法的话.当contactId 不连续的话就不对了..
select top 8 * from Contact where userLdapId='aaa'
and contactId in( select contactId from contactGroupsend where userLdapId='aaa' and contactGroupName='同事')
and (contactId>(select max(contactId) from (select top 8 contactId from Contact where userLdapId='aaa' order by contactId) as t))
order by contactId
--
每页8条,如果( select contactId from contactGroupsend where userLdapId='aaa' and contactGroupName='同事') 查出来的contactId 是1,2,3,4,5,6,7,9
那么第一页出来的只有1,2,3,4,5,6,7 七条数据.
--
关键是这个条件不知道怎么处理:contactId in( select contactId from contactGroupsend where userLdapId='aaa' and contactGroupName='同事')

谢谢各位的关注。
...全文
196 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
大叔obnijeh 2008-10-29
  • 打赏
  • 举报
回复
我理解你的思路就OK了.谢谢ilovewalk .
大叔obnijeh 2008-10-29
  • 打赏
  • 举报
回复
我的不连续隔得太远了。。
大叔obnijeh 2008-10-27
  • 打赏
  • 举报
回复

用我给你的数据去测是没问题,但是如果contactGroupsend表中的contactGroupsendId不连续的时候,就不对了。
ilovewalk 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ilovewalk 的回复:]
contactGroupsend的数据

contactGroupsendId contactId contactGroupName userLdapId
1 1 同事 aaa
2 2 同事 aaa
3 3 同事 aaa
4 4 同事 aaa
5 6 同事 aaa
7 13 同事 aaa
8 20 同事 aaa
9 21 同事 aaa
10 22 同事 aaa
11 15 同事 aaa

你仔细看看,你给的数据contactGroupsendId是不连续的啊????
[/Quote]
哪里连续了,没有6也。
唉,要先SET IDENTITY_INSERT contactGroupsend ON,就能插入非连续的了,
再SET IDENTITY_INSERT contactGroupsend OFF,是为了能SET IDENTITY_INSERT Contact ON。
大叔obnijeh 2008-10-27
  • 打赏
  • 举报
回复
contactGroupsendId 这个ID是1,2,3,4,5,6,7,8,9,10,11.这个是连续的(错误)。 这个改成不连续的。
contactId 这个ID是1,2,3,4,6,13,20,21,22,15.这个是不连续的(正确).不用改。
ilovewalk 2008-10-27
  • 打赏
  • 举报
回复
contactGroupsend的数据

contactGroupsendId contactId contactGroupName userLdapId
1 1 同事 aaa
2 2 同事 aaa
3 3 同事 aaa
4 4 同事 aaa
5 6 同事 aaa
7 13 同事 aaa
8 20 同事 aaa
9 21 同事 aaa
10 22 同事 aaa
11 15 同事 aaa

你仔细看看,你给的数据contactGroupsendId是不连续的啊????
ilovewalk 2008-10-27
  • 打赏
  • 举报
回复
不连续是什么意思?
mjjzg 2008-10-26
  • 打赏
  • 举报
回复
路过,学习一下,UP
ChinaJiaBing 2008-10-26
  • 打赏
  • 举报
回复

接分....
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
ALSO:
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SET @perpage=8
SELECT @rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF @rows%@perpage!=0 SET @pages=@pages+1
IF @pagenum <1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=@perpage*@pagenum
SET @startRow=@endRow-(@perpage-1)
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
EXECUTE('SELECT ID=IDENTITY(INT,1,1),contactId+0 AS contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId INTO t FROM Contact')
EXECUTE('SELECT c.contactId,c.contactName,c.contactTel,c.contactCompanyTel,c.contactEmail,c.contactChatNumber,c.contactMark,c.userLdapId FROM t c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE c.ID BETWEEN '+@startRow+' AND '+@endRow+' ORDER BY contactId')
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
DROP TABLE contactGroupsend
GO
CREATE TABLE contactGroupsend
(
contactGroupsendId int IDENTITY(1,1) primary key, --主键 自动增加
contactId int , --联系人ID
contactGroupName varchar(100), --组的名称 唯一
userLdapId Varchar(100) --登陆名,
)
GO
SET IDENTITY_INSERT contactGroupsend OFF
GO
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(1,1,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(2,2,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(3,3,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(4,4,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(5,6,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(7,13,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(8,20,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(9,21,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(10,22,'workmate','aaa')
INSERT contactGroupsend(contactGroupsendId,contactId,contactGroupName,userLdapId) VALUES(11,15,'workmate','aaa')
GO
SELECT * FROM contactGroupsend
GO
CREATE TABLE Contact
(
contactId int IDENTITY(1,1) primary key, --ID主键
contactName varchar(100), --姓名
contactTel varchar(100), --手机号码
contactCompanyTel varchar(100), --公司电话
contactEmail varchar(100), --电子邮箱
contactChatNumber varchar(100), --聊天工具号码
contactMark varchar(1000), --备注
userLdapId Varchar(100) --用户名或用户ID
)
GO
SET IDENTITY_INSERT Contact ON
GO
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(1,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(2,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(3,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(4,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(6,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(13,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(15,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(20,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(21,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(22,'oy','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(48,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(49,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(50,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(51,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(52,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(53,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(53,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(55,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(56,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
INSERT Contact(contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId) VALUES(57,'genius','333333333333','33333333333','33333333@133.com','3333333333','3333333','aaa')
GO
SELECT * FROM Contact
GO
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SET @perpage=8
SELECT @rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF @rows%@perpage!=0 SET @pages=@pages+1
IF @pagenum <1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=@perpage*@pagenum
SET @startRow=@endRow-(@perpage-1)
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
EXECUTE('SELECT ID=IDENTITY(INT,1,1),contactId+0 AS contactId,contactName,contactTel,contactCompanyTel,contactEmail,contactChatNumber,contactMark,userLdapId INTO t FROM Contact')
EXECUTE('SELECT c.contactId,c.contactName,c.contactTel,c.contactCompanyTel,c.contactEmail,c.contactChatNumber,c.contactMark,c.userLdapId FROM t c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId+0 AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE c.ID BETWEEN '+@startRow+' AND '+@endRow+' ORDER BY contactId')
GO



1 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
2 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
3 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
4 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
6 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
13 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
15 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
20 oy 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
大叔obnijeh 2008-10-26
  • 打赏
  • 举报
回复
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SET @perpage=8
SELECT @rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF @rows%@perpage!=0 SET @pages=@pages+1
IF @pagenum <1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=@perpage*@pagenum
SET @startRow=@endRow-(@perpage-1)
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
EXECUTE('SELECT IDENTITY(INT,1,1) AS ID,cs.* INTO t FROM Contact cs')
EXECUTE('SELECT c.contactId,c.userLdapId,c.contactTel,c.contactCompanyTel,c.contactEmail,c.contactChatNumber,c.contactMark,c.userLdapId FROM t c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE c.ID BETWEEN '+@startRow+' AND '+@endRow+' ORDER BY contactId')
GO

服务器: 消息 8108,级别 16,状态 1,行 1
无法使用 SELECT INTO 语句向表 't' 中添加标识列,该表中已有继承了标识属性的列 'contactId'。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 't' 无效。
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SET @perpage=8
SELECT @rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF @rows%@perpage!=0 SET @pages=@pages+1
IF @pagenum <1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=@perpage*@pagenum
SET @startRow=@endRow-(@perpage-1)
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
EXECUTE('SELECT IDENTITY(INT,1,1) AS ID,cs.* INTO t FROM Contact cs')
EXECUTE('SELECT c.contactId,c.userLdapId,c.contactTel,c.contactCompanyTel,c.contactEmail,c.contactChatNumber,c.contactMark,c.userLdapId FROM t c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE c.ID BETWEEN '+@startRow+' AND '+@endRow+' ORDER BY contactId')
GO

1 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
2 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
3 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
4 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
6 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
13 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
15 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
20 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=2
SET @perpage=8
SELECT @rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF @rows%@perpage!=0 SET @pages=@pages+1
IF @pagenum <1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=@perpage*@pagenum
SET @startRow=@endRow-(@perpage-1)
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
EXECUTE('SELECT IDENTITY(INT,1,1) AS ID,cs.* INTO t FROM Contact cs')
EXECUTE('SELECT c.contactId,c.userLdapId,c.contactTel,c.contactCompanyTel,c.contactEmail,c.contactChatNumber,c.contactMark,c.userLdapId FROM t c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE c.ID BETWEEN '+@startRow+' AND '+@endRow+' ORDER BY contactId')
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SET @perpage=8
SELECT @rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF @rows%@perpage!=0 SET @pages=@pages+1
IF @pagenum <1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=@perpage*@pagenum
SET @startRow=@endRow-(@perpage-1)
EXECUTE('WITH Contacts AS
(
SELECT *,ROW_NUMBER() OVER (ORDER BY contactId) AS RowNum FROM Contact
)
SELECT c.contactId,c.userLdapId,c.contactTel,c.contactCompanyTel,c.contactEmail,c.contactChatNumber,c.contactMark,c.userLdapId FROM Contacts c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE RowNum BETWEEN '+@startRow+' AND '+@endRow+' ORDER BY contactId')



1 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
2 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
3 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
4 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
6 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
13 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
15 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
20 aaa 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa


BTW:可以结贴了吧,给分给分.
大叔obnijeh 2008-10-26
  • 打赏
  • 举报
回复
SQLserver2000 ROW_NUMBER() 没用。
水族杰纶 2008-10-26
  • 打赏
  • 举报
回复
DECLARE @pagenum AS INT, @pagesize AS INT
SET @pagenum = 2
SET @pagesize = 3
SELECT *
FROM (SELECT ROW_NUMBER() OVER(ORDER BY newsid DESC) AS rownum,
newsid, topic, ntime, hits
FROM news) AS D
WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
ORDER BY newsid DESC
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
try:
DECLARE @pagenum INT,@perpage INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SET
@perpage=8
SELECT
@rows=COUNT(*),@pages=COUNT(*)/@perpage FROM Contact
IF
@rows%@perpage!=0 SET @pages=@pages+1
IF
@pagenum<1 SET @pagenum=1
IF
@pagenum>@pages SET @pagenum=@pages
SET
@endRow=@perpage*@pagenum
SET
@startRow=@endRow-(@perpage-1)
EXECUTE
('WITH Contacts AS
(
SELECT *,ROW_NUMBER() OVER (ORDER BY contactId) AS RowNum FROM Contact
)
SELECT c.contactId,c.userLdapId FROM Contacts c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE RowNum BETWEEN '
+@startRow+' AND '+@endRow+'')
ilovewalk 2008-10-26
  • 打赏
  • 举报
回复
CREATE TABLE Contact
(
contactId int IDENTITY(1,1) primary key, --ID主键
userLdapId Varchar(100) --用户名或用户ID
)
GO
INSERT Contact(userLdapId) VALUES('A')
INSERT Contact(userLdapId) VALUES('A')
INSERT Contact(userLdapId) VALUES('A')
INSERT Contact(userLdapId) VALUES('A')
INSERT Contact(userLdapId) VALUES('A')
INSERT Contact(userLdapId) VALUES('A')
INSERT Contact(userLdapId) VALUES('A')
GO
CREATE TABLE contactGroupsend
(
contactGroupsendId int IDENTITY(1,1) primary key, --主键 自动增加
contactId int , --联系人ID
contactGroupName varchar(100), --组的名称 唯一
userLdapId Varchar(100) --登陆名,
)
GO
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(1,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(2,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(3,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(4,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(5,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(6,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(7,'workmate','aaa')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(8,'workmate','bbb')
INSERT contactGroupsend(contactId,contactGroupName,userLdapId) VALUES(9,'workmate','aaa')
GO
DECLARE @pagenum INT,@startRow INT,@endRow INT,@pages INT,@rows INT
SET @pagenum=1
SELECT @rows=COUNT(*),@pages=COUNT(*)/8 FROM Contact
IF @rows%8!=0 SET @pages=@pages+1
IF @pagenum<1 SET @pagenum=1
IF @pagenum>@pages SET @pagenum=@pages
SET @endRow=8*@pagenum
SET @startRow=@endRow-7
EXECUTE('SELECT c.* FROM Contact c
INNER JOIN contactGroupsend cg
ON c.contactId=cg.contactId AND cg.userLdapId=''aaa'' AND contactGroupName=''workmate''
WHERE c.contactID BETWEEN '+@startRow+' AND '+@endRow+'')

@pagenum=1
contactId userLdapId
----------- ----------------------------------------------------------------------------------------------------
1 A
2 A
3 A
4 A
5 A
6 A
7 A

(7 row(s) affected)

@pagenum=2
contactId userLdapId
----------- ----------------------------------------------------------------------------------------------------
9 A

(1 row(s) affected)
大叔obnijeh 2008-10-26
  • 打赏
  • 举报
回复
ilovewalk 请看看,这表中是这样的数据。
Contact 的数据。

contactId contactName contactTel contactCompanyTel contactEmail contactChatNumber contactMark userLdapId
1 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
2 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
3 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
4 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
6 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
13 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
15 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
20 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
21 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
22 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
48 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
49 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
50 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
51 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
52 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
53 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
54 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
55 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
56 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
57 天才 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa


contactGroupsend的数据

contactGroupsendId contactId contactGroupName userLdapId
1 1 同事 aaa
2 2 同事 aaa
3 3 同事 aaa
4 4 同事 aaa
5 6 同事 aaa
7 13 同事 aaa
8 20 同事 aaa
9 21 同事 aaa
10 22 同事 aaa
11 15 同事 aaa


contactGroupsend表中与Contact 表关联的有10条数据。每页8条,那么查出来的Contact 信息中就应该有2页。
第一页在contactGroupsend表中的contactId 应该是
1
2
3
4
6
13
20
21

或是
1
2
3
4
6
13
15
20
查出来对应表的信息应该是

1 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
2 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
3 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
4 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
6 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
13 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
20 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
21 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa

1 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
2 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
3 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
4 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
6 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
13 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
15 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa
20 欧阳天涯 333333333333 33333333333 33333333@133.com 3333333333 3333333 aaa

加载更多回复(1)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧