3

以下 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 语句给出了错误“靠近 AS 的语法”?

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;

我不能在删除语句中使用联接吗?

如果不是,我该如何执行上述删除?

编辑

表 tblKeyPointLinks 是在 tblKPI 和 tblKeyPoints 之间建立多对多关系的中间表。因此,SELECT 语句多次返回 tblKPI 中的某些条目。这就是 DELETE 语句可能有问题的原因吗?解决此问题的最佳方法是什么?

4

3 回答 3

5

是的,您可以在删除语句中加入:

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;
于 2012-07-30T00:46:24.523 回答
2

你可以这样做:

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)
于 2012-07-30T00:41:06.777 回答
2

成功的代码如下:

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 通过简单地省略AS关键字,语句就可以正常工作。

于 2012-07-30T08:54:11.330 回答