表:电影
mID title year director
101 Gone with the Wind 1939 Victor Fleming
102 Star Wars 1977 George Lucas
103 The Sound of Music 1965 Robert Wise
104 E.T. 1982 Steven Spielberg
105 Titanic 1997 James Cameron
106 Snow White 1937 <null>
107 Avatar 2009 James Cameron
108 Raiders of the Lost Ark 1981 Steven Spielberg
表:评级
rID mID stars ratingDate
201 101 2 2011-01-22
201 101 4 2011-01-27
202 106 4 <null>
203 103 2 2011-01-20
203 108 4 2011-01-12
203 108 2 2011-01-30
204 101 3 2011-01-09
205 103 3 2011-01-27
205 104 2 2011-01-22
205 108 4 <null>
206 107 3 2011-01-15
206 106 5 2011-01-19
207 107 5 2011-01-20
208 104 3 2011-01-02
我需要获取尚未评价的电影。在这种情况下,泰坦尼克号(mID 105)和星球大战(mID 102)从未在评级表中获得费率。
我用
想出来了从电影中选择不同的movie.title,评分在哪里 rating.mid!= movie.mid除了从中选择distinct movie.title 电影,评级为rating.mid = movie.mid
然而,我认为它可能有更好(更容易/更清洁)的方式。
答案 0 :(得分:5)
简单:
SELECT Movies.* FROM Movies LEFT JOIN Rating ON Movies.mID = Rating.mID WHERE Rating.mID IS NULL
答案 1 :(得分:3)
如果我理解你的问题,那就像是outer joins的教科书应用。
答案 2 :(得分:3)
你可以这样做:
SELECT * FROM Movie WHERE mid NOT IN(SELECT DISTINCT(mid)FROM Rating)
基本上它会选择电影表中不在评级表中的所有记录,将它们链接在“中间”列上,我假设它是唯一的标识符。
答案 3 :(得分:3)
我将增加另一种可能性。
Select [list columns here]
from Movie m
where NOT exists (SELECT * FROM RATING r where m.mid = r.mid)