3

私はレストランのレビューのデータベースを持っています。、、の3つのテーブルrestaurantuserありreviewます。

ArestaurantにはNreviewsがあり、auserにはNがありreviewsます。そのためreview、外部キーrestaurant_idと。が含まれますauthor_id。各テーブルにはID属性があります。

たくさん一緒に投稿してくれるユーザーを探したいです。具体的には、とが2で、両方との両方によるレビューがあるすべてのレストランの数を含む列user_A, user_B, reviewed_togetheruser_A持つuser_Bテーブルが必要user.IDsです。reviewed_togetheruser_Auser_B

私はSQLの初心者であり、これらの状況を適切に処理する方法を学びたいので、リソースへのリンクと思考プロセスへのスケッチが非常に役立ちます:-)

4

2 に答える 2

1

このクエリを使用できます:

select r1.author_id as user_a, r2.author_id as user_b,
  count(r1.restaurant_id) as reviewed_together
from review r1 inner join review r2 on r1.restaurant_id = r2.restaurant_id
  and r1.author_id > r2.author_id
group by r1.author_id, r2.author_id

しかし、注意してください

r1.author_id > r2.author_id

これを<>(等しくない)に変更すると、レコードが重複するためです。

このクエリで正しい結果が得られるかどうかを教えてください。

于 2013-02-08T09:56:09.133 に答える
0

実はこの答えは完全には当てはまらないかもしれませんが、まだコメントは使えないので、答えを使って返信したり、明確にしたりします。

私の最初の論理的な試行は以下のコードです、それは問題ないように見えますが、条件はどこにありますか。それについてはよくわかりませんが、コメントしていただければ強化できます。以下のコードを試していただけませんか。データがないため、試せませんでした。

select UserA.UserID as USER_A, UserB.UserID as USER_B, count(restID) as COMMON_COMMENTS
from 
    (select distinct(userID),restID from reviews group by restID) UserA,
    (select distinct(userID),restID from reviews group by restID) UserB
where UserA.restID = UserB.restID
group by UserA.userID, userB.userID

あなたのコメントがこの質問を強化することを願っています。

于 2013-02-08T09:58:13.757 に答える