如何在SQL Server中删除多行数据

3

我有一个二手汽车销售数据库和四张带有关系的表。相同的列名具有关联。

这些表是:
Record: 记录ID, 品牌名称, 型号...
Features: 特征ID, 特征名称
Marks: 品牌ID, 品牌名称
Carfeature: 车辆特征ID, 记录ID, 特征ID

现在,我想在C#中从Marks表中删除一个品牌。当我删除一个品牌时,SQL必须删除所有具有该品牌的记录。

我使用了以下查询语句:

DELETE from Carfeature 
 where RecID = (select RecID 
 from Record 
 where Mark = (select markname 
                 from Marks 
                where MarkID=@MarkID))";


    string sorgudelmarkfromrecord = "DELETE from Record where Mark=
(select Markname from Marks where MarkID=@MarkID)";

    string sorgudelmark = "DELETE from Marks where MarkID=@MarkID";

当我运行这个程序时,会出现如下的错误信息:
子查询返回了多于一个值。
subquery跟随=、!=、<、<=、>、>=时,或者当subquery被用作表达式时,是不允许这种情况发生的。
语句已终止。
那么,我该如何从表中删除多条数据呢?
4个回答

11

如果我理解正确,您可以使用此查询来删除特定MarkID的所有CarFeatures:

DELETE FROM CarFeature 
WHERE RecID IN (
    select RecID 
    from Record 
    where Markname IN (
        select Markname 
        from Marks 
        where MarkID = @MarkID
    )
)

删除记录和标记是这个查询的简化版本,具体的 SQL 查询语句由你自己决定。


+1 如果你花费的时间比我更多来清晰地格式化你的答案。 :) - Moose
谢谢你们两位朋友。我尝试了一下,它起作用了。我知道这很简单,但我是一个新手程序员。我应该更努力地学习SQL查询 :) 再次感谢。 - Mehmet Kaleli

2

使用 where RecID in (...) 代替 where RecID=(...)

。此方法更为高效。


1

使用这个

DELETE from Record r 
where r.Mark in
    (select m.Mark from Marks where r.MarkID=m.MarkID);

注意: markid 必须是两个表格中的主键。

0

在外键上使用ON DELETE CASCADE?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接