如何在SQL Server中删除多行

时间:2009-10-18 22:33:44

标签: sql sql-server tsql

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

表格是:
Record:RecID Markname Model ...
Features:FeatureID功能名称
Marks:MarkID商标名
Carfeature:CarfeatureID RecID FeatureID

现在,我想删除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返回超过1 的值。

subquery跟随=, !=, <, <= , >, >=subquery用作表达式时,不允许这样做。

声明已经终止。

那么,如何从表中删除多个数据呢?

4 个答案:

答案 0 :(得分:11)

如果我理解正确,您可以使用此查询删除所有CarFeatures以获取标记MarkID:

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

删除记录和标记是此查询的更简单版本,我将保留确切的SQL。

答案 1 :(得分:2)

而不是使用where RecID=(...)使用where RecID in (...)

答案 2 :(得分:1)

ON外键上的DELCAD CASCADE?

答案 3 :(得分:1)

使用此

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

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