【发布时间】:2016-02-11 20:35:36
【问题描述】:
我有 2 张桌子。具有 2 列(rID、名称)的审阅者和具有 3 列(rID、mID、星号)的评级。我想选择所有评论者对,以便两位评论者都对同一部电影进行评分。查询应返回两个审阅者的姓名,消除重复并按字母顺序返回每对的姓名。我的代码是:
select distinct Re1.name, Re2.name
from Reviewer Re1, Rating R1, Rating R2, Reviewer Re2
where R1.mID = R2.mID
and Re1.rID = R1.rID
and Re2.rID = R2.rID
and R1.rID <> R2.rID
group by R1.mid
order by Re1.name
它产生这个:
Ashley White Chris Jackson
Chris Jackson Brittany Harris
Elizabeth Thomas Daniel Lewis
James Cameron Elizabeth Thomas
Mike Anderson Sarah Martinez
...而预期的结果是:
Ashley White Chris Jackson
Brittany Harris Chris Jackson
Daniel Lewis Elizabeth Thomas
Elizabeth Thomas James Cameron
Mike Anderson Sarah Martinez
我错过了什么?
【问题讨论】:
-
想象 A、B、C 在您的数据中,因此您加入将导致
A->B、A-->C和C-->A和C-->B(以及其他)通过使用 您消除A-->A 但您保留重复的 C-->A。所以通过使用>或<而不是<>可以消除重复;这应该可以解决订购问题。