0

SQL Server を初めて使用するので、SQL クエリの 1 つについて助けが必要です。

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ステートメントは結果を正常に表示しますが、重複も含まれています。データが表示されているときに重複を削除したいので、 and を使用してみDISTINCTましGROUP BYたが、正しく使用していないためか、うまくいきませんでした。

更新:より明確で混乱を避けるために、各テーブルが正確に何をしているか、何を達成しようとしているのかを説明させてください。

Rating表には次の列があります ( ) ID, Topic, CountLikes, CountDisLikes, Extra, CreatedByUser。各トピックのトピック情報と好き嫌いの数、およびUserIDそのトピックを作成したユーザーを保存します。

LikeDisLike表には次の列があります ( ) ID, TopicID, UserName, Clikes。テーブル内の列TopicIDへの FKです。IDRating

今私がやろうとしているのは、重複する行なしでこのテーブルの両方から情報を取得することです。Ratingテーブル +のすべての列とテーブルの列のデータを重複行なしで取得する必要がUserNameありますClikesLikeDislike

更新 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
4

3 に答える 3

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

これはあなたが試したものですか?

于 2013-01-18T03:03:06.793 に答える
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

それ以外の場合は、評価 tbl の同じ ID に対して 2 つのトピックを挿入している likedislike tbl を確認し、UserName、Clikes も likedislike tbl で類似しているかどうかを確認してください。

于 2013-01-18T05:39:38.537 に答える
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,UserName) 制約が必要だと思います。

于 2013-01-18T06:42:00.673 に答える