Sql 选择不同的返回重复结果

Sql 选择不同的返回重复结果,sql,distinct,kentico,Sql,Distinct,Kentico,我试图返回kentico站点中阅读次数最多的前n个博客帖子,但出于某种原因,尽管使用了DISTINCT子句,我的查询仍返回了两行重复的帖子。查询如下: SELECT DISTINCT TOP 3 [BlogPostTitle] ,[BlogPostDate] ,[BlogPostSummary] ,[BlogPostBody] ,[BlogPostTeaser] ,[BlogPostAllowComments]

我试图返回kentico站点中阅读次数最多的前n个博客帖子,但出于某种原因,尽管使用了
DISTINCT
子句,我的查询仍返回了两行重复的帖子。查询如下:

 SELECT DISTINCT TOP 3
       [BlogPostTitle]
      ,[BlogPostDate]
      ,[BlogPostSummary]
      ,[BlogPostBody]
      ,[BlogPostTeaser]
      ,[BlogPostAllowComments]
      ,[BlogPostPingedUrls]
      ,[BlogPostNotPingedUrls]
      ,[BlogLogActivity]
      ,[DocumentTags]
      ,[HitsStatisticsID]
      ,[HitsCount]
      ,[NodeAliasPath]
  FROM [AngliaRegistrars].[dbo].[Analytics_Statistics]

  INNER JOIN [AngliaRegistrars].[dbo].[Analytics_HourHits] ON HitsStatisticsID = StatisticsID
  INNER JOIN [AngliaRegistrars].[dbo].[View_CONTENT_BlogPost_Joined] ON StatisticsObjectID = DocumentNodeID

  WHERE StatisticsCode = 'pageviews' ORDER BY HitsCount DESC
在编写SQL方面,我并不是最有经验的,所以我希望这是我错过的最明显的东西,但对我来说似乎是有意义的

非常感谢您的帮助


编辑*

在选择列中包括表别名:

SELECT DISTINCT TOP 3
       a.[BlogPostTitle]
      ,a.[BlogPostDate]
      ,a.[BlogPostSummary]
      ,a.[BlogPostBody]
      ,a.[BlogPostTeaser]
      ,a.[BlogPostAllowComments]
      ,a.[BlogPostPingedUrls]
      ,a.[BlogPostNotPingedUrls]
      ,a.[BlogLogActivity]
      ,a.[DocumentTags]
      ,a.[HitsStatisticsID]
      ,a.[HitsCount]
      ,a.[NodeAliasPath]
  FROM [AngliaRegistrars].[dbo].[Analytics_Statistics]
  INNER JOIN [AngliaRegistrars].[dbo].[Analytics_HourHits] ON HitsStatisticsID = StatisticsID
  INNER JOIN [AngliaRegistrars].[dbo].[View_CONTENT_BlogPost_Joined] a ON StatisticsObjectID = DocumentNodeID
  WHERE StatisticsCode = 'pageviews' ORDER BY HitsCount DESC

当连接多个表时,DISTINCT可能会产生混合结果。这样,我们可以确保查询只返回一个表的不同记录,在本例中:“查看内容”BlogPost“加入”

这可能是您已经查看过的内容,但是如果您使用的是可变字符长度字段,则数据中可能包含一些不可见的字符或制表符,这些字符或制表符会影响结果。这会使它看起来像你有重复的,但实际上不是


检查字段的LEN()以快速比较重复项。如果在被视为重复的字段上有不同的长度,请尝试对列使用TRIM()函数,查看是否删除了重复项。

您是否绝对确定记录是完全重复的?能否显示结果集的示例?不是wild,而是推测。我认为OP陷入了一个常见的陷阱:在一个他真正想要的独特查询中包含更多字段。“我只是想促进这方面的思考。”拉马克我很抱歉,
Hitsunt
由于一些奇怪的原因在两个重复行之间有所不同,但这是唯一的区别。所以我猜
DISTINCT
确实返回了独特的结果,但不是我想要的那种。为什么会被否决?如果我能改进这个问题,让我知道。它被否决了,因为你描述的问题实际上并不存在。@JNK我会认为这很明显吗?更可能的情况是,我的逻辑中出现了问题(这就是问题所在),或者
DISTINCT
被某种方式窃听了?无论如何,我解决了这个问题,在HitStatisticsID上进行内部连接是个问题,因为有些列具有相同的ID,尽管有人告诉我该列包含唯一的数据。加入HitsID给了我想要的结果。我不明白为什么这会与问题有关出于好奇,为什么这会起作用?因为DISTINCT在加入多个表时会产生混合结果。这样,我们就可以确保查询只返回一个表的不同记录,在本例中是:“查看内容”和“博客帖子”。由于op实际上可以运行此查询,这意味着那里没有不明确的列,因此表别名(尽管是一种良好的做法)不是必需的,并且不会影响结果的重复。请参见关于op表示结果不是完全重复的问题的评论。