我正在尝试返回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
答案 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”