查找在特定上下文中一起显示的所有元素

时间:2013-02-08 09:21:51

标签: mysql sql relational-database

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

restaurant有N reviewsuser有N reviews。因此,review包含外键restaurant_idauthor_id。每个表都有ID属性。

我想找到一起发帖的用户。更具体地说,我想要一个包含user_A, user_B, reviewed_together列的表格,其中user_Auser_B是两个user.IDsreviewed_together包含所有餐馆的数量BOTH user_Auser_B进行了审核。

我是SQL的初学者,我想学习如何正确处理这些情况,所以链接到资源和草图到你的思考过程将是一个巨大的帮助: - )

2 个答案:

答案 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

我希望您的评论会增强此查询。