【发布时间】:2011-05-02 16:07:26
【问题描述】:
在我的当前项目中,我需要对从 SQL 返回的结果进行一些分页。我遇到了一个极端情况,其中查询可以接受标识符作为 where 子句的一部分,通常这不是问题,但在一种情况下,我们有一个标识符被传递,它与其中一个具有一对多关系查询连接的表,它在结果中返回多行。该问题已通过在查询中引入 distinct 得到解决。以下是返回一行正确结果的查询(当然所有表/字段名称都已更改):
select distinct [item_table].[item_id]
, row_number() over (order by [item_table].[pub_date] desc, [item_table].[item_id]) as [row_num]
from [item_table]
join [OneToOneRelationShip] on [OneToOneRelationShip].[other_id] = [item_table].[other_id]
left join [OneToNoneOrManyRelationship] on [OneToNoneOrManyRelationship].[item_id] = [item_table].[item_id]
where [item_table].[pub_item_web] = 1
and [item_table].[live_item] = 1
and [item_table].[item_id] in (1404309)
但是,当我在查询中引入分页时,我发现它现在返回多行,而它应该只返回一个。我使用的分页方法如下:
select [item_id]
from (
select distinct [item_table].[item_id]
, row_number() over (order by [item_table].[pub_date] desc, [item_table].[item_id]) as [row_num]
from [item_table]
join [OneToOneRelationShip] on [OneToOneRelationShip].[other_id] = [item_table].[other_id]
left join [OneToNoneOrManyRelationship] on [OneToNoneOrManyRelationship].[item_id] = [item_table].[item_id]
where [item_table].[pub_item_web] = 1
and [item_table].[live_item] = 1
and [item_table].[item_id] in (1404309)
) as [items]
where [items].[row_num] between 0 and 100
我担心向外部查询添加 distinct 会导致返回的结果数量不正确,我不确定如何解决此问题。我查询的数据库是 MS SQL Server 2008。
【问题讨论】:
标签: sql tsql sql-server-2008 pagination duplicates