0

私はSQLServerを初めて使用し、SQLクエリの1つについてサポートが必要です。

2つのテーブル(RatingLikeDislike)があります。

私は次のLEFT JOINようなものを使用してこれらのテーブルの両方からデータを取得しようとしています:

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

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

より明確で混乱を少なくするために、各テーブルが正確に何をするのか、そして私が何を達成しようとしているのかをお話ししましょう。

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

サンプルデータを含む評価表

ID  Topic               CountLikes  CountDisLikes  Extra        CreatedByUser
1   Do You Like This       211          58          YesId                2
2   Or This                17           25          This also            3
79  Testing at home        1             0          Testing at home      2
80  Testing at home again  1             0          Testing              2
82  testing dislikes       0             1          Testing              2
76  Testing part 3         7             5          Testing 3            4
77  Testing part 4         16            6          Testing 4            5

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

サンプルデータを含むLikeDislikeテーブル

ID  TopicID UserName    Clikes
213     77      2       TRUE
214     76      2       FALSE
215     77      5       TRUE
194     77      3       TRUE
195     76      3       FALSE
196     2       3       TRUE
197     1       3       FALSE

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

以下は重複した結果です

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

1 に答える 1

0

昨日の投稿と同じように、DISTINCT が何を返すと想定されているかを理解していないと思います。LikeDislike テーブルには異なる値があるため、DISTINCT 行を返しています。

たとえば、TopicId 77 を見てみましょう。LikeDislike テーブルに 3 つの一致するレコードがあるため、3 つの DISTINCT 行が返されます。目的の出力が UserName と Clikes がコンマで区切られた単一の行である場合、それは可能です-for xmlおそらく使用して調べてくださいstuff(これは、この件に関する最近の回答です)。または、TopicId に一致する最初の行を返したい場合は、それも可能row_numberです。

ご希望の出力をお知らせください。解決策を提供いたします。

幸運を。

于 2013-01-18T15:58:28.063 に答える