Sql 如何删除以名称的第一个字符开头的行?

Sql 如何删除以名称的第一个字符开头的行?,sql,oracle,Sql,Oracle,我有一个表Movie,其中movieID是表预算中的主键,外键是movieID。电影表有一个属性MovieTitle,它是电影的名称 我想知道如何删除电影表中以第一个字符“K”开头的行 例如,我想删除电影标题“天国”,但必须先删除表Budge中的外键。我想知道针对这种情况的命令是什么。删除与标题为“天国”的电影相关的所有记录,然后您也可以删除该电影 SELECT movieID FROM Movie WHERE movieTitle = 'Kingdom of Heaven' 这将返回您的电影

我有一个表Movie,其中movieID是表预算中的主键,外键是movieID。电影表有一个属性MovieTitle,它是电影的名称

我想知道如何删除电影表中以第一个字符“K”开头的行


例如,我想删除电影标题“天国”,但必须先删除表Budge中的外键。我想知道针对这种情况的命令是什么。

删除与标题为“天国”的电影相关的所有记录,然后您也可以删除该电影

SELECT movieID FROM Movie WHERE movieTitle = 'Kingdom of Heaven'
这将返回您的电影ID 然后从第二个表中删除与此id相关的记录

DELETE * FROM (secondTable) WHERE movieID = (value got from the first query)
现在,你终于可以删除这部电影了

DELETE * FROM Movie WHERE movieID = (value got from the first query)
试试这个:

delete from Movie where MovieTitle like 'K%'

我想这是你最好的选择。您应该有一个
ON DELETE
外键约束,该约束将在从表中删除相应记录后删除该记录

DELETE FROM Movie WHERE SUBSTR(movieTitle, 1, 1) = 'K'

为了避免在多用户环境中出现肮脏行为,我建议您使用下面的方法。意图-在delete语句期间不允许更改电影标题

declare 
 lMovieRec Movie%rowtype;
begin
 select *
 into lMovieRec
 from movie
 where SUBSTR(movieTitle, 1, 1) = 'K'
 for update nowait;

 delete from Budge  WHERE movieID = lMovieRec.id;

 delete from movie WHERE ID = lMovieRec.id; 
end;
例如,我想删除电影标题“天国”,但是 我必须先删除表Budge中的外键。我想知道 这种情况下的命令是什么

您最好在Budge中将引用电影的外键声明为DELETE CASCADE上的
。执行此操作时,删除电影将自动删除Budge中引用电影表的所有行

要删除所有以“K”开头的电影(我认为这个想法实际上不太可能是你真正想要的),请使用以下内容

delete from movie
where MovieTitle like 'K%';
指定整个标题要安全得多,但您应该注意,电影有时会共享标题。(“速度”、“逃犯”、“泰坦尼克号”等)

为了清楚地说明你指的是两部电影中的哪一部,当两部电影共享相同的标题时,可以单独使用电影id,或者同时使用标题和id。(如果整个语句都出现在日志文件中,那么如果同时拥有标题和id号,则更容易看到发生了什么。)


你能确定你使用的是什么数据库吗?您使用SQL作为查询语言吗?您可以使用触发器或外键级联删除。但是我们不需要先删除表预算中的外键电影ID吗?也许他也可以像使用
一样使用,因为您的代码在我所知的任何SQL方言中都不起作用。@JohnSaunders:在K%左右没有引号,它在你不知道的任何SQL方言中都无法工作。我必须单独完成这项工作,或者一次编写它们。右键单击数据库选择新查询。。。并按此顺序编写所有查询
delete from movie
where MovieTitle = 'Klute';
delete from movie
where MovieTitle = 'Titanic'
  and MovieID = 42;