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