我有一个二手销售汽车数据库和四个关系表。相同的列名称具有关系。
表格是:
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
用作表达式时,不允许这样做。
声明已经终止。
那么,如何从表中删除多个数据呢?
答案 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必须是两个表中的主键..