对于所有评论者对,使得两个评论者都对同一部电影进行评分,返回两个评论者的姓名

Mag*_*Liu 4 sql sqlite

斯坦福 SQL 问题自定进度课程:

对于所有评论者对,例如两位评论者都对同一部电影进行评分,请返回两位评论者的姓名。消除重复,不要将审阅者与自己配对,并且每对仅包含一次。对于每一对,按字母顺序返回该对中的名称。

架构:

Movie ( mID, title, year, director ) 
Run Code Online (Sandbox Code Playgroud)

有一部电影,ID 号为 mID、片名、上映年份和导演。

Reviewer ( rID, name ) 
Run Code Online (Sandbox Code Playgroud)

ID号为rID的审稿人有一定的姓名。

Rating ( rID, mID, stars, ratingDate ) 
Run Code Online (Sandbox Code Playgroud)

评论者 rID 在某个 ratingDate 为电影 mID 给出了多个星级评分 (1-5)。

我的尝试:

Select R.Name, R2.Name 
From Reviewer R 
    Join Reviewer R2 on (R.rID = R2.rID)
    Join Rating Rt on (Rt.rID = R2.rID) 
    Join Rating Rt2 on (Rt2.rID = R.rID)
 Where Rt.MID = Rt2.mID and R.rID < r2.rID
Run Code Online (Sandbox Code Playgroud)

我知道我需要一个包含 2 个审阅者姓名列和 2 个电影列的表。我应用了条件,以便电影必须彼此相等,并且 ID 不能与问题相同的条件是“不要将评论者与自己配对,并且每对仅包含一次”。

我的结果是空的(不正确)。我究竟做错了什么?

Gor*_*off 6

我将从评级的自加入开始,然后输入名称:

select distinct rv1.name, rv2.name
from rating r1 join
     rating r2
     on r1.mid = r2.mid join
     reviewer rv1
     on rv1.rid = r1.rid join
     reviewer rv2
     on rv2.rid = r2.rid and rv1.name < rv2.name;
Run Code Online (Sandbox Code Playgroud)

您的查询实际上非常相似。我认为主要问题是按select distinct名称排序而不是按名称排序id