2013-01-18 98 views
0

我是SQL Server的新手,需要關於我的一個SQL查詢的幫助。從兩個表中刪除結果中的重複數據

我有2個表格(RatingLikeDislike)。

我試圖用LEFT JOIN這樣得到來自這兩個表的數據:

SELECT 
    R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra, LD.UserName, LD.Clikes 
FROM 
    Rating As R 
LEFT JOIN 
    LikeDislike AS LD ON LD.TopicID = R.ID 
ORDER BY 
    R.ID DESC 

以上SELECT語句顯示結果良好,但也包括重複的。我想在數據顯示時刪除重複項,我嘗試使用DISTINCTGROUP BY,但沒有運氣,可能是因爲我沒有正確使用它。

更新:爲了更清晰和更少混淆,讓我告訴你每個表的功能和我試圖實現的功能。

Rating表具有以下列(ID, Topic, CountLikes, CountDisLikes, Extra, CreatedByUser)。它存儲主題信息和每個主題的喜好和不喜歡的數量以及創建該主題的用戶的UserID

LikeDisLike表中有以下列(ID, TopicID, UserName, Clikes)。 TopicIDRating表中的ID列的FK。

現在我想要做的是從這兩個表中獲取信息而不重複的行。我需要從Rating表中獲取數據的所有列從LikeDislike表+ UserNameClikes列沒有任何重複的行

更新2:
下面是結果與此SELECT語句重複:

SELECT 
    DISTINCT ld.TopicID, R.ID, R.Topic, R.CountLikes, R.CountDisLikes, 
    LD.UserName, LD.Clikes 
FROM 
    Rating AS R 
LEFT JOIN 
    LikeDislike AS LD ON LD.TopicID = R.ID 

結果輸出:

TopicID ID Topic   CountLikes CountDislikes UserName Clikes 
NULL 79 Testing at home 1   0    NULL  NULL 
NULL 80 Testing at home2 1   0    NULL  NULL 
NULL 82 testing dislikes 0   1    NULL  NULL 
1  1 Do You Like This 211   58   3   FALSE 
2  2 Or This   17   25   3   TRUE 
76  76 Testing part 3  7   5    2   FALSE 
76  76 Testing part 3  7   5    3   FALSE 
77  77 Testing part 4  16   6    2   TRUE 
77  77 Testing part 4  16   6    3   TRUE 
77  77 Testing part 4  16   6    5   TRUE 
+1

如果您的上述查詢返回重複項(並且您嘗試選擇不同的項目),則很可能您的某個列有所不同,可能是您的評分表中的您的ID列。你目前的產出是多少? – sgeddes

+2

你能舉出你得到的結果和輸入數據的例子嗎? –

+0

你列一個可能有重複的行 –

回答

2

以下語法應刪除完整的重複項:

SELECT distinct R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra, 
     LD.UserName, LD.Clikes 
FROM Rating As R 
LEFT JOIN LikeDislike AS LD on LD.TopicID = R.ID 
ORDER BY R.ID desc 

這是你試過的嗎?

+0

是的,這正是我如何嘗試,但它不工作 – Aaf

+0

什麼問題?我懷疑SQL在起作用,但你對它應該做什麼有不同的期望。 –

+0

當我用Distinct子句運行上面的select語句時,它仍然顯示所有重複項,而不是刪除它們。不過,我想出了這個SELECT語句用於刪除重複一些谷歌搜索後,「選擇R.ID,R.Topic,R.CountLikes,R.CountDisLikes,R.Extra,TopicID評級從爲r LEFT JOIN(SELECT TopicID從LikeDisLike由TopicID)擔任R.ID = LD.TopicID ORDER LD通過R.ID說明」 – Aaf

0

我覺得這種方式會爲您提供正確的輸出

select ID, Topic,CountLikes,CountDisLikes,Extra, 
    UserName, Clikes from (
    SELECT distinct R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra, 
    LD.UserName, LD.Clikes 
      , ROW_NUMBER() over (partition by R.ID order by R.ID desc) as rid 
    FROM Rating As R 
    LEFT JOIN LikeDislike AS LD on LD.TopicID = R.ID 
    ORDER BY R.ID desc) t where rid=1 order by ID desc 

是別人請檢查likedislike TBL其中u被插入2話題評級TBL的相同的ID,並檢查用戶名,Clikes也不管它們是相似的在likedislike TBL

+0

我收到錯誤「解析查詢時出現錯誤。 [令牌行號= 5,令牌行偏移= 28,令牌出錯=超過]'與上述查詢命令。 – Aaf

0

試試這個

 SELECT R.ID, R.Topic, R.CountLikes, R.CountDisLikes, R.Extra, 
LD.UserName, LD.Clikes FROM Rating AS R 
     Left Join (SELECT TopicID, UserName, min(Clikes) as Clikes 
    From LikeDisLike Group by TopicID,UserName) AS LD 
on R.ID = LD.TopicID ORDER By R.ID Desc 

順便說一句,我認爲你需要UNIQUE(TopicID,用戶名)的約束,以避免重複。

+0

我收到錯誤'該函數的指定參數值無效。 [參數#= 1,函數名稱(如果已知)= min]' – Aaf

+0

可能在列名中出錯。 – msi77