通过多个联接删除行

Nic*_*ahn 4 sql sql-server sql-server-2008

我正在尝试通过连接多个表来删除行,如您所见,但这会引发错误:

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%'
Run Code Online (Sandbox Code Playgroud)

出现错误:

消息156,级别15,状态1,第1行关键字'INNER'附近的语法错误。

Lie*_*ers 5

正确的语法是

DELETE [ FROM ] { <object> } 
[ FROM <table_source>]
[ WHERE { <search_condition> } ]
Run Code Online (Sandbox Code Playgroud)

应用于您的示例,这将成为

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%'
Run Code Online (Sandbox Code Playgroud)

注意表的两个引用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%'
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)