2011-12-28 20 views
3

我想通過參加多個表刪除行,你可以看到,但它引發我一個錯誤:由多個刪除行加入

DELETE FROM Reg INNER JOIN 
      RegDoc ON Reg.RegId = RegDoc.RegId INNER JOIN 
      Doc ON RegDoc.DocId = Doc.DocId 
WHERE Doc.Name LIKE N'%Title%' 

收到錯誤:

Msg 156, Level 15, State 1, Line 1 Incorrect syntax near the keyword 'INNER'.

回答

4

的正確的語法是

DELETE [ FROM ] { <object> } 
[ FROM <table_source>] 
[ WHERE { <search_condition> } ] 

應用您的例子,這會成爲

DELETE FROM Reg 
FROM Reg 
     INNER JOIN RegDoc ON Reg.RegId = RegDoc.RegId 
     INNER JOIN Doc ON RegDoc.DocId = Doc.DocId 
WHERE Doc.Name LIKE N'%Title%' 

注引用到Reg

這可以通過混疊(雖然有在這種情況下沒有必要),進一步縮短

DELETE FROM r 
FROM Reg r 
     INNER JOIN RegDoc ON r.RegId = RegDoc.RegId 
     INNER JOIN Doc ON RegDoc.DocId = Doc.DocId 
WHERE Doc.Name LIKE N'%Title%' 

MSDN

DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh 
INNER JOIN Sales.SalesPerson AS sp 
ON spqh.BusinessEntityID = sp.BusinessEntityID 
WHERE sp.SalesYTD > 2500000.00; 
+0

Oughtta」被'DELETE FROM REG ...'沒有? – Farray 2011-12-28 18:07:36

+0

@Farray兩人都會工作。 – ean5533 2011-12-28 18:13:48

+0

@Farray - 'DELETE FROM'是正確的,但第一個'FROM'確實可以省略。這有點像寫出'LEFT OUTER JOIN',其中'OUTER'也是多餘的,但我仍然傾向於完全寫出它。 – 2011-12-28 18:13:49

1

使用此

DELETE 
FROM Reg 
FROM Reg 
INNER JOIN 
      RegDoc ON Reg.RegId = RegDoc.RegId INNER JOIN 
      Doc ON RegDoc.DocId = Doc.DocId 
WHERE Doc.Name LIKE N'%Title%' 

或更清晰,恕我直言:

DELETE Reg 
FROM Reg 
INNER JOIN RegDoc 
    ON Reg.RegId = RegDoc.RegId 
INNER JOIN Doc 
    ON RegDoc.DocId = Doc.DocId 
WHERE Doc.Name LIKE N'%Title%' 
1

你可以這樣說:

DELETE Reg 
FROM Reg 
INNER JOIN RegDoc ON Reg.RegId = RegDoc.RegId 
INNER JOIN Doc ON RegDoc.DocId = Doc.DocId 
WHERE Doc.Name LIKE N'%Title%' 
1

您可以使用一個別名,

DELETE r 
FROM Reg as r 
INNER JOIN RegDoc rd ON r.RegId = rd.RegId 
INNER JOIN Doc d ON rd.DocId = d.DocId 

實際上,你可以delete rddelete d太:雖然它,如果你使用的別名是從表的名稱不同更清晰。

0

略高於其他答案不同的方法(這都是很好的)

DELETE FROM Reg 
WHERE Reg.RegID IN (SELECT RegDoc.RegId 
        FROM RegDoc 
         INNER JOIN Doc 
         ON RegDoc.DocId = Doc.DocId 
        WHERE Doc.Name LIKE N'%Title%')