假设我在三个表中有以下列
电影
mID | title | year | director
点评
rID | name
评分
rID | mID | stars | ratingDate
我给出的指示是:</ p>
“对于同一评论者对同一部电影进行两次评分并且第二次给予更高评价的所有情况,请返回评论者的姓名和电影的标题”
到目前为止,我已经采用了这种方式,我已经对所有表进行了三向合并,以捕获所有需要的信息。我接下来要做的是创建这种三向合并的新实例,并找到评论者和电影相等的位置以及评级更高的位置。这就是我到目前为止所拥有的
SELECT *
FROM (SELECT *
FROM Movie Mov
INNER JOIN Rating Rat
ON Mov.mID = Rat.mID
INNER JOIN Reviewer REv
ON Rev.rID = Rat.rID) A, A table;
WHERE ...
问题是我无法创建A的新实例。我在这里尝试执行此操作A table
。
如果有人对如何更好地解决这个问题有任何其他建议,请告诉我。
答案 0 :(得分:0)
试试这个:
SELECT v.Name AS Reviewer, m.Name AS Movide
FROM (SELECT DISTINCT A.rID, A.mID
FROM Rating A INNER JOIN Rating B
ON A.rID = B.rID AND A.mID = B. mID
WHERE A.ratingDate > B.ratingDate
AND A.starts > B.starts
) s
JOIN Reviewer v ON v.rID =s.rID
JOIN Movie m ON m.mID = s.mID
但是,我没有在Sqlite上测试过。
答案 1 :(得分:0)
因此,遇到这样的问题,首要任务是找到你想要的行。我会用这样的查询来做到这一点:
select *
from Rating as r1
where exists (
select 1
from rating as r2
where r1.rid = r2.rid
and r1.mid = r2.mid
and r1.stars < r2.stars
and r1.ratingDate < r2.ratingDate
)
然后添加你想要获取的部分(就像你在做的那样):
select title, name
from Rating as r1
inner join Movie as m on m.mid = r1.mid
inner join Reviewer as z on z.rid = r1.rid
where exists (
select 1
from rating as r2
where r1.rid = r2.rid
and r1.mid = r2.mid
and r1.stars < r2.stars
and r1.ratingDate < r2.ratingDate
)
以下是测试数据显示工作的小提琴:http://sqlfiddle.com/#!7/5f0f8/3