2014-10-10 3 views
3

이 두 쿼리의 차이점을 이해하지 못합니다. 첫 번째 쿼리는 올바른 아니라, 이제두 삭제 쿼리 간의 SQL 차이점

DELETE FROM Rating 
WHERE mID in 
      (SELECT m.mID 
      FROM Movie m JOIN Rating r ON m.mID = r.mID 
      WHERE (year < 1970 or year > 2000) and stars < 4) 

DELETE FROM Rating 
WHERE mID in 
      (SELECT mID 
      FROM Movie 
      WHERE year < 1970 or year > 2000) 
and stars < 4 

:

Movie (mID, title, year, director) 
English: There is a movie with ID number mID, a title, a release year, and a director. 

Reviewer (rID, name) 
English: The reviewer with ID number rID has a certain name. 

Rating (rID, mID, stars, ratingDate) 
English: The reviewer rID gave the movie mID a number of stars rating (1-5) on a certain ratingDate. 

질문은 무엇 :

Remove all ratings where the movie's year is before 1970 or after 2000, and the rating is fewer than 4 stars. 

두 쿼리

모든

첫째,이 스키마입니다 두 번째 쿼리는 있지만 그 이유를 이해하지 못합니다.

첫 번째 쿼리에서 나는 등급이 4 별 미만이고 1970 년 이전 또는 2000 년 이후의 모든 영화에서 mID을 생성합니다. 그런 다음 등급이 mID 인 것으로보고 행을 삭제합니다. (최소한 내가 생각하는 바)

두 번째 쿼리에서는 등급이 4보다 작고 행의 수가 0보다 작은 모든 행을 삭제할 것이고, mID은 1970 년 이전의 영화이거나 이 쿼리에서 2000

+1

Stanford의 온라인 데이터베이스 과정에서 온 것입니까? 추억을 다시 불러옵니다 : P –

+0

두 개의 하위 쿼리를 단독으로 실행하면 왜 나타날지 생각됩니다. –

+0

예, 그렇습니다. 결과의 차이를 이해합니다. 논리 차이를 이해하지 못합니다. – FranGoitia

답변

4
DELETE FROM Rating 
WHERE mID in 
      (SELECT m.mID 
      FROM Movie m JOIN Rating r ON m.mID = r.mID 
      WHERE (year < 1970 or year > 2000) and stars < 4) 

후 누구의 MID는 영화 4 ~ 5 성급 호텔도 삭제 리뷰는 것을 의미하는 4 이하 별의 등급과 리뷰의 미드 일치하는 리뷰를 제거하는 1970 년 이전이나 2000 년 이후에 발표 된 사람은 평점이 4 점 미만인 평생 검토를 적어도 한 번했습니다. 검토 삭제에 대한 유일한 점검은 등급이 아니라 mID입니다.

DELETE FROM Rating 
WHERE mID in 
      (SELECT mID 
      FROM Movie 
      WHERE year < 1970 or year > 2000) 
and stars < 4 

이 쿼리에서는 검토를 삭제할 때 언급 한 조건 (영화 출시 년 및 평가)을 모두 확인합니다.