SQL ужасы

Jan 31, 2012 18:21

Тренирую 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... )

Leave a comment

Comments 3

это еще не ужасы anonymous January 31 2012, 20:50:41 UTC
не совсем понял на счет примера, это твое решение или из книжки
(также не совсем понял какой именно 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

Re: это еще не ужасы smirnoffs February 1 2012, 05:29:19 UTC
Все должно работать на SQLite. Не уверен, что в SQLite есть with.
Попозже проверю.

Reply


это еще не ужаз _chapaev January 31 2012, 20:53:33 UTC
вариант запроса
от анонимуса это я скинул

Reply


Leave a comment

Up