我有一个餐厅评论数据库。我有三个表:restaurant
,user
和review
。
restaurant
有N reviews
,user
有N reviews
。因此,review
包含外键restaurant_id
和author_id
。每个表都有ID
属性。
我想找到一起发帖的用户。更具体地说,我想要一个包含user_A, user_B, reviewed_together
列的表格,其中user_A
和user_B
是两个user.IDs
,reviewed_together
包含所有餐馆的数量BOTH user_A
和user_B
进行了审核。
我是SQL的初学者,我想学习如何正确处理这些情况,所以链接到资源和草图到你的思考过程将是一个巨大的帮助: - )
答案 0 :(得分: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
部分,因为如果你将其更改为<> (不平等)你会得到重复的记录。
请尝试告诉我此查询是否能为您提供所需的正确结果。
答案 1 :(得分: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
我希望您的评论会增强此查询。