删除具有特定关系的行

时间:2013-01-26 12:25:31

标签: sql sqlite join

我有一些表格:

/* Delete the tables if they already exist */
drop table if exists Movie;
drop table if exists Reviewer;
drop table if exists Rating;

/* Create the schema for our tables */
create table Movie(mID int, title text, year int, director text);
create table Reviewer(rID int, name text);
create table Rating(rID int, mID int, stars int, ratingDate date);

/* Populate the tables with our data */
insert into Movie values(101, 'Gone with the Wind', 1939, 'Victor Fleming');
insert into Movie values(102, 'Star Wars', 1977, 'George Lucas');
insert into Movie values(103, 'The Sound of Music', 1965, 'Robert Wise');
insert into Movie values(104, 'E.T.', 1982, 'Steven Spielberg');
insert into Movie values(105, 'Titanic', 1997, 'James Cameron');
insert into Movie values(106, 'Snow White', 1937, null);
insert into Movie values(107, 'Avatar', 2009, 'James Cameron');
insert into Movie values(108, 'Raiders of the Lost Ark', 1981, 'Steven Spielberg');

insert into Reviewer values(201, 'Sarah Martinez');
insert into Reviewer values(202, 'Daniel Lewis');
insert into Reviewer values(203, 'Brittany Harris');
insert into Reviewer values(204, 'Mike Anderson');
insert into Reviewer values(205, 'Chris Jackson');
insert into Reviewer values(206, 'Elizabeth Thomas');
insert into Reviewer values(207, 'James Cameron');
insert into Reviewer values(208, 'Ashley White');

insert into Rating values(201, 101, 2, '2011-01-22');
insert into Rating values(201, 101, 4, '2011-01-27');
insert into Rating values(202, 106, 4, null);
insert into Rating values(203, 103, 2, '2011-01-20');
insert into Rating values(203, 108, 4, '2011-01-12');
insert into Rating values(203, 108, 2, '2011-01-30');
insert into Rating values(204, 101, 3, '2011-01-09');
insert into Rating values(205, 103, 3, '2011-01-27');
insert into Rating values(205, 104, 2, '2011-01-22');
insert into Rating values(205, 108, 4, null);
insert into Rating values(206, 107, 3, '2011-01-15');
insert into Rating values(206, 106, 5, '2011-01-19');
insert into Rating values(207, 107, 5, '2011-01-20');
insert into Rating values(208, 104, 3, '2011-01-02');

我需要编写一个查询来删除评级表中的行,其中电影的年份是1970年之前或之后的2000年,评级少于4星。我今年仍然坚持。 首先让我们说一年> 2000年。另一年是< 1970.我如何加入这两个和三个评级条件?

2 个答案:

答案 0 :(得分:3)

以下内容将删除年度范围[1970-2000]以外评分少于4星的电影评分:

DELETE FROM Rating
WHERE EXISTS (
    SELECT 1 
    FROM Movie 
    WHERE Movie.mID = Rating.mID 
    AND (year < 1970 OR year > 2000)
)
AND stars < 4

SQL Fiddle example

答案 1 :(得分:0)

DELETE r
FROM Rating r
INNER JOIN Movie m
    ON r.mID = m.mID
WHERE (m.year < 1979 OR m.year > 2000)
AND r.rating < 4

应该在大多数RDMS上进行,而不是在SQLite上进行。