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

时间:2012-09-04 13:43:54

标签: sql oracle

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

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

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

5 个答案:

答案 0 :(得分:3)

我认为这是你最好的选择。您应该有一个ON DELETE外键约束,一旦从表中删除就会删除相应的记录。

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

答案 1 :(得分:1)

删除所有与电影有关的标题"天国"然后你也可以删除电影。

SELECT movieID FROM Movie WHERE movieTitle = 'Kingdom of Heaven'

这会返回你的movieID 然后从第二个表中删除有关此id的记录

DELETE * FROM (secondTable) WHERE movieID = (value got from the first query)

现在,你可以删除电影

DELETE * FROM Movie WHERE movieID = (value got from the first query)

答案 2 :(得分:0)

我建议您使用类似下面的内容,以免在多用户环境中遇到脏行为。目的 - 在删除声明中不允许更改电影标题。

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;

答案 3 :(得分:0)

  

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

通过在Budge中声明引用电影为ON DELETE CASCADE的外键,你可能会更好。当您这样做时,删除电影将自动删除Budge中引用电影表的任何行。

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

delete from movie
where MovieTitle like 'K%';

指定整个标题很多更安全,但您应该知道电影有时会共享标题。 (“速度”,“逃亡者”,“泰坦尼克号”等)

delete from movie
where MovieTitle = 'Klute';

为了清楚地表达两部电影中的哪一部,当两部电影共享相同的标题时,请单独使用MovieID,或同时使用标题和ID。 (如果整个语句出现在日志文件中,如果您两者标题和ID号,则更容易看到发生了什么。)

delete from movie
where MovieTitle = 'Titanic'
  and MovieID = 42;

答案 4 :(得分:-1)

试试这个:

delete from Movie where MovieTitle like 'K%'