选择不同的返回重复结果

时间:2012-10-24 16:25:38

标签: sql distinct kentico

我正在尝试返回kentico网站中排名最高的最热门博客帖子,但由于某种原因,我的查询返回了两个重复的行,尽管使用了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时,我并不是最有经验的人,所以希望它显然是我错过的,但似乎对我有意义。

非常感谢任何帮助

编辑* results of query

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:-4)

在选择列中包含表别名:

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可以提供混合结果。有了这个,我们确保查询只返回该表的不同记录,在这种情况下:“View_CONTENT_BlogPost_Joined”