Query
如何創建此 SQL 查詢?
我正在斯坦福線上參加免費的 DB 課程,坦率地說,其中一個練習給我帶來了一些麻煩。我有一種感覺,這應該非常簡單,所以對於 DBA,我顯然不太擅長 SQL。
我們正在使用簡化的電影評級方案。
對於同一評論者對同一部電影兩次評分並第二次給予更高評分的所有情況,返回評論者的姓名和電影的標題。
這是架構:
Movie ( mID, title, year, director ) Reviewer ( rID, name ) Rating ( rID, mID, stars, ratingDate )
我該怎麼辦?
您可以根據此類條件自行加入表(至少,我可以在 SQL Server 中執行此操作):
SELECT r.name, m.title FROM rating rt JOIN movie m ON (rt.mid = m.mid) JOIN reviewer r on (rt.rid = r.rid) JOIN rating rt2 on (rt.mid = rt2.mid and rt.rid = rt2.rid) WHERE rt.ratingDate > rt2.ratingDate AND rt.stars > rt2.stars;
請注意,我們正在將評級歸還給自身。這樣,我們可以使用 WHERE 子句來查找
rating
日期和星號都大於rating
.您可以在此處查看我在 SQL Fiddle 中建構的完整範例。
如果您想添加評論者對電影進行了這 2 條評論並且不再添加的條件,您可以添加:
AND NOT EXISTS --- not exists ( SELECT * FROM rating rt3 --- another rating WHERE rt3.mid = m.mid --- for same movie AND rt3.rid = r.rid --- by same reviewer AND rt3.ratingDate <> rt2.ratingDate --- on different date AND rt3.ratingDate <> rt1.ratingDate --- than the first 2 reviews )
這假定該
Rating
表具有(rID, mID, ratingDate)
作為主鍵。