0

SQL サーバーでストアド プロシージャを使用していますが、いくつかの重複レコードが得られます。もちろん、データベースに重複レコードはありませんが、ストアド プロシージャが同じレコードの 2 つのインスタンスを与えています。違う?クエリが重複したレコードを生成しないようにするにはどうすればよいですか? それは私のSP select句です:

select  (ROW_NUMBER() OVER (ORDER BY Review.Point desc) ) as rownumber, 

Business.BusinessId,Business.BName,Business.BAddress1
  ,Business.BAddress2,Business.BCity,Business.BState,Business.BZipCode,Business.countryCode,Business.BPhone1,Business.BPhone2,Business.BEmail,Business.Keyword
  ,Business.BWebAddress,Business.BCatId,Business.BSubCatId,Business.BDetail,Business.bImage,Business.UCId,Business.UCConfirm
  ,Business.UOId,Business.UOConfirm,Business.x,Business.y,Cat.CatName,SubCat1.SubCatName
 from Business left outer join 
        Review on business.BusinessId=Review.BusinessId left outer join
        Cat  on business.BCatid=Cat.CatId  left outer join 
        SubCat1  on business.BSubCatid=SubCat1.SubCatId '+@sql2+' 
) as tbl
where rownumber between  '+CONVERT(varchar, @lbound)+' and '+CONVERT(varchar, @ubound);
4

3 に答える 3

1

結合ロジックを掘り下げるデータはわかりませんが、BusinessID 間で重複している場合はROW_NUMBER()、重複のために別のデータを追加できます。

select  (ROW_NUMBER() OVER (ORDER BY Review.Point desc) ) as rownumber, 
r = ROW_NUMBER()OVER(PARTITION BY Business.BusinessId ORDER BY Business.BusinessId)
Business.BusinessId,Business.BName,Business.BAddress1
  ,Business.BAddress2,Business.BCity,Business.BState,Business.BZipCode,Business.countryCode,Business.BPhone1,Business.BPhone2,Business.BEmail,Business.Keyword
  ,Business.BWebAddress,Business.BCatId,Business.BSubCatId,Business.BDetail,Business.bImage,Business.UCId,Business.UCConfirm
  ,Business.UOId,Business.UOConfirm,Business.x,Business.y,Cat.CatName,SubCat1.SubCatName
 from Business left outer join 
        Review on business.BusinessId=Review.BusinessId left outer join
        Cat  on business.BCatid=Cat.CatId  left outer join 
        SubCat1  on business.BSubCatid=SubCat1.SubCatId '+@sql2+' 
) as tbl
where rownumber between  '+CONVERT(varchar, @lbound)+' and '+CONVERT(varchar, @ubound)
AND r = 1;
于 2012-07-14T13:40:53.877 に答える
0

この左結合を削除してみてください

Review on business.BusinessId=Review.BusinessId left outer join 

クエリでは必要ないようです。1つのビジネスに複数のレビューがある場合...

于 2012-07-14T13:34:15.783 に答える
0

クエリに予約語 DISTINCT を含めます。

例えば

select distinct 
    *
from
    students s
    inner join enrollments e on e.StudentId = s.Id
    inner join courses c on c.Id = e.CourseId

ただし、結果テーブルの予期しない重複は、多くの場合 (常にではありません)、不適切な形式のクエリまたは適切に設計されていないデータベースを使用している手がかりになります。

于 2012-07-14T13:33:36.363 に答える