2013-08-22 2 views
0

표에 표시되지 기록 선택 방법 : 영화내가 다른 테이블

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.title 제외 movie.mid, 등급 곳 rating.mid = movie.mid

그러나 더 쉽게 (더 쉽고/깔끔하게) 할 수 있다고 생각합니다.

+3

힌트 : - 그들은 단지 명시 적으로 JOIN 구문을 정의하는 SQL ANSI 표준의 일부이며, 암시 적 조인 안티 패턴하지 않습니다 ... 왼쪽은 RATINGDATE가 NULL' WHERE를'조인 ... – MicSim

+0

@HLGEM는 동의 . Codd 이후의 암시 적 조인이 있었고 ANSI 표준보다 훨씬 앞선 것으로 명시 적 조인보다 성능 경로에 별다른 차이가 없다는 점을 감안할 때 이는 양식적인 취향입니다. –

+0

아니요 문체를 선호하지 않습니다. Implict 조인은 문제를 일으 킵니다. 우발적 인 corss 조인을 만들 수 있습니다. 내부 조인과 외부 조인의 comniation을 사용하면 나쁜 결과를 얻을 수 있고 유지하기가 더 어려워집니다. 문서화 된 반 패턴입니다. 그 (것)들과 많은 쓸데없는 것들을 사용함에 이점이 없습니다. 아마도 당신은 읽어야합니다 : http : //www.amazon.com/SQL-Antipatterns-Programming-Programmers-ebook/dp/B00A376BB2/ref=sr_1_1? s = digital-text & ie = UTF8 & qid = 1377180059 & sr = 1-1 & keywords = sql + antipatterns – HLGEM

답변

5

: 기본적으로

이 모두 선택합니다 (등급) DISTINCT (중간을 선택) 영화에서

SELECT * WHERE 중반 NOT IN :

SELECT Movies.* FROM Movies LEFT JOIN Rating ON Movies.mID = Rating.mID WHERE Rating.mID IS NULL 
3

정확하게 질문을 이해하면 outer joins의 교과서 신청서처럼 보입니다. 간단한

3

당신은 이런 식으로 그것을 할 수 등급 표에없는 영화 테이블의 레코드를 '중간'열에 연결하는 것으로 가정합니다.이 식별자는 고유 한 식별자입니다.

3

또 다른 가능성을 추가 할 것입니다.

Select [list columns here] 
from Movie m 
where NOT exists (SELECT * FROM RATING r where m.mid = r.mid)