-3

kentico サイトで最も読まれた上位 n 個のブログ投稿を返そうとしていますが、何らかの理由で、DISTINCT句を使用しているにもかかわらず、クエリが 2 つの重複した行を返しています。クエリは次のとおりです。

 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 の記述に関しては、私は必ずしも最も経験豊富なわけではないので、うまくいけば、私が見逃していることは明白ですが、私には理にかなっているように思えます。

どんな助けでも大歓迎です

edit*クエリの結果

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 は、複数のテーブルを結合するときにさまざまな結果をもたらす可能性があります。これにより、クエリがその 1 つのテーブルのみの個別のレコードのみを返すようにします。この場合: "View_CONTENT_BlogPost_Joined"

于 2012-10-24T16:35:26.903 に答える