-3

我正在尝试返回 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 方面,我并不是最有经验的人,所以希望这是我错过的显而易见的事情,但对我来说似乎很有意义。

任何帮助是极大的赞赏

编辑*查询结果

4

2 回答 2

3

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

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

于 2012-10-24T16:48:00.997 回答
-4

在 Select 列中包含表别名:

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”

于 2012-10-24T16:35:26.903 回答