Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除具有特定关系的行_Sql_Sqlite_Join - Fatal编程技术网

Sql 删除具有特定关系的行

Sql 删除具有特定关系的行,sql,sqlite,join,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); cr

我有一些桌子:

/* 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。我如何加入这两个和第三个评级条件?

以下内容将删除[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

应该在大多数RDM上这样做,但不要在SQLite上这样做。

你是说所有收视率低于4的电影都会被淘汰吗。那么,在剩下的几行中,那些在1970年之前或2000年之后的会消失吗?2000年后的5分电影还保留吗?我不相信SQLite支持这种语法。好的,谢谢。因此,我是不是最好删除答案以避免引起任何人的混淆,还是让它允许向下投票?如果你认为答案不应该在那里,那么最好删除答案,而不是让它被向下投票。你可以随时改变主意,稍后再取消删除。因为你没有太多答案,所以最好暂时不要删除我不想触发自动禁令。以后你可以随时删除它。。。Upvoting@lc.的评论是一种表示答案不正确的方式,尽管它对于其他RDBMS的答案是正确的,一个答案是否定的@lc。但是OP只有5个。虽然细节还不清楚,如果OP在接下来的几次回答中这样做了几次,他很可能会这样做。@JohnRock当然。感谢您让生活变得轻松,可以轻松地复制到SQL Fiddle中。它看起来不太适合歌剧?@JohnRock-Hmm?我是认真的。我必须在很多问题中重新格式化数据,这样SQLFiddle的解析器就会接受它。在你的情况下,我所要做的就是复制并粘贴代码。我一度怀疑我发布所有代码是否做错了,但无论如何,我很高兴它能帮上忙:@lc。如果你发现为了让人们的示例数据在SQL Fiddle中正确解析,你必须定期做一些常见的事情,请在我的github项目上为此提交一个问题,这里:确保包含未正确解析的数据。谢谢
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