【发布时间】:2014-10-10 14:48:01
【问题描述】:
我不明白这两个查询之间的区别。
首先,这是架构:
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.
两个查询:
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
现在,第一个查询不正确,而第二个查询不正确,但我不明白为什么。
在第一个查询中,我从评级低于 4 星的所有电影以及 1970 年之前或 2000 年之后的年份生成 mID。然后在评级中查找 mID 并删除该行。 (至少我认为它是这样做的)
在第二个查询中,我从 Rating 表中删除所有星数小于 4 的行,并且 mID 是一部电影,其年份在 1970 年之前或 2000 年之后。
【问题讨论】:
-
这是来自斯坦福的数据库在线课程吗?带回回忆:P
-
我想你会明白为什么如果你自己运行这两个子查询。
-
是的。我明白结果的不同,我不明白逻辑的不同。
-
提示:电影可以有多个评分。
标签: sql where sql-delete