3

我有一个餐厅评论数据库。我有三个表restaurantuserreview

Arestaurant有 N reviews,auser有 N reviews。因此,review包含外键restaurant_idauthor_id. 每个表都有一个ID属性。

我想找到经常一起发帖的用户。更具体地说,我希望有一个表格,user_A, user_B, reviewed_together其中user_Auser_B为 2列,user.IDsreviewed_together包含所有餐厅的数量,其中有 BOTHuser_A和的评论user_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 回答