2009-10-18 78 views
3

我有一個二手銷售汽車數據庫和四個關係表。相同的列名有關係。如何在SQL Server中刪除多行

表是:
Record:RecID Markname型號...
Features:FeatureID和Featurename
Marks:MarkID Markname
Carfeature:CarfeatureID RecID FeatureID和

現在,我想刪除的標記的標記在C#中。當我刪除標記時,SQL必須刪除具有此標記的所有記錄。

我用這樣的查詢:

DELETE from Carfeature 
where RecID = (select RecID 
from Record 
where Mark = (select markname 
       from Marks 
       where [email protected]))"; 


    string sorgudelmarkfromrecord = "DELETE from Record where Mark= 
(select Markname from Marks where [email protected])"; 

    string sorgudelmark = "DELETE from Marks where [email protected]"; 

當我運行它,我得到一個錯誤信息是這樣的:

Subquery返回超過1個值。

subquery跟在=, !=, <, <= , >, >=或當subquery用作表達式時,這是不允許的。

該聲明已終止。

那麼,我怎樣才能從表中刪除多個數據?

回答

11

如果我理解你的權利,你可以使用這個查詢刪除所有CarFeatures的cerain MarkID:

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

的記錄和標記去除是這個查詢的簡化版本,我將離開確切的SQL由你決定。

+0

+1。 :) – Moose 2009-10-18 22:40:46

+0

謝謝你們兩位朋友。我試過了,它工作。我知道這很簡單,但我是一個新手程序員。我應該更努力地處理SQL查詢:)再次感謝 – 2009-10-18 22:43:06

2

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

1

ON DELETE CASCADE?

1

使用本

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

注: markid必須花費更多的時間來清楚地格式化你的答案比我有兩個表中的主鍵..