Тренирую SQL. Как бы переписать запрос покороче?
For all cases where the same reviewer rated the same movie twice and gave it a higher rating the second time, return the reviewer's name and the title of the movie.
Movie ( mID, title, year, director )
English: There is a movie with ID number mID, a title, a release year, and a director.
Reviewer ( rID
(
Read more... )
Comments 3
(также не совсем понял какой именно sql ты мучаеш)
в стандарте Sql-1999 есть оператор with
с ним у меня получилось так
with rev as (
select r.* from Rating as r join
(select rId,mId,COUNT(*) as c from Rating group by rId,mId) as r0
on (r.mId =r0.mId and r.rId = r0.rId )
where r0.c=2 )
select rw.Name ,m.mId from rev as rev1 join rev as rev2
on (rev1.mId =rev2.mId and rev1.rId =rev2.rId and
rev1.stars >rev2.stars and rev1.ratingDate > rev2.ratingDate )
left join reviewer as RW on (rev1.rId =RW.rId )
left join Movie as M on (rev1.mId =m.mId )
может и не короче но
(для mssql для остальных надо проверять)
выборка для with будет произведена 1 раз
а в твоем варианте вложенные Select будут производиться для каждой строки
проверил для mssql
Reply
Попозже проверю.
Reply
от анонимуса это я скинул
Reply
Leave a comment