Sql server 使用内部联接删除TSQL
以下SQL语句在我的数据库上执行良好:Sql server 使用内部联接删除TSQL,sql-server,tsql,Sql Server,Tsql,以下SQL语句在我的数据库上执行良好: SELECT * FROM tblKPIs AS k INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID WHERE h.CaseNo = 50043; 然而,等效的Delete语句
SELECT * FROM tblKPIs AS k
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID
WHERE h.CaseNo = 50043;
然而,等效的Delete语句给出了一个错误“语法接近于”
DELETE FROM tblKPIs AS k
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID
WHERE h.CaseNo = 50043;
我不能在Delete语句中使用联接吗
如果没有,我如何执行上述删除
编辑
表tblKeyPointLinks是在TBLKPI和tblKeyPoints之间建立多对多关系的中间表。因此,SELECT语句多次返回TBLKPI中的某些条目。这就是DELETE语句可能出现问题的原因吗?解决这个问题的最佳方法是什么?您可以:
DELETE FROM tblKPIs
WHERE id in (
SELECT id
FROM tblKPIs AS k
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID
WHERE h.CaseNo = 50043)
是,您可以加入删除语句:
DELETE k FROM tblKPIs AS k
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID
WHERE h.CaseNo = 50043;
成功的代码如下:
DELETE k
FROM tblKPIs k
INNER JOIN tblKeyPointLinks l ON k.KPIID = l.KPIID
INNER JOIN tblKeyPoints p ON p.KptID = l.KptID
INNER JOIN tblHistory h ON h.HistoryID = p.HistoryID
WHERE h.CaseNo = 50043;
显然DELETE
语句不喜欢使用关键字AS
只需将
作为
关键字省略,语句就可以正常工作。现在返回错误“多部分标识符k.KPIID无法绑定”,我认为这是错误的,因为您的示例中有一个输入错误。KPIID是tblKPIs中的一列吗?我同意@BrianDishaw的观点。听起来你想加入一个不存在的专栏…没有打字错误。KPIID是tblKPIs中的主键。也不是在原来的帖子中,我说如果前面加了SELECT而不是DELETE,那么完全相同的语句也会起作用。还返回错误“多部分标识符k.KPIID无法绑定”。我认为这是错误的,因为您的示例中有一个输入错误。KPIID是tblKPIs中的一列吗?SQL的哪个版本?语法各不相同。这与Igor的解决方案相同。唯一的区别是,他的别名前包含AS
。是的,我知道——我想我也这么说了——这真的证明我的解决方案是正确的吗?对不起,我不知道你在说什么。如果你是说有人否决了你的答案,那不是我。不管怎么说,我现在明白了,你的答案没有被否决票,所以也许你的意思是别的。