2012-07-30 73 views
3

下面的SQL语句执行罚款,我的数据库:TSQL删除使用内部联接

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; 

我不能在Delete语句中使用连接吗?

如果不是我如何执行上面的Delete?

EDIT

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

+0

什么版本的SQL?语法各不相同。你删除AS k。 – Paparazzi 2012-07-30 01:04:41

回答

5

是的,你可以在delete语句JOIN:

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; 
+0

还会返回错误“多部分标识符k.KPIID无法绑定” – PJW 2012-07-30 00:54:29

+1

我认为这是错误的,因为您的示例中存在拼写错误。 KPIID是tblKPIs中的一列吗? – 2012-07-30 00:58:16

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) 
+0

现在返回错误“多部分标识符k.KPIID无法绑定” – PJW 2012-07-30 00:53:48

+0

我认为这是错误的,因为您的示例中存在拼写错误。 KPIID是tblKPIs中的一列吗? – 2012-07-30 00:57:54

+0

我同意@BrianDishaw。这听起来像你正试图加入一个不存在的专栏...... – 2012-07-30 00:58:34

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声明不要” t喜欢使用关键字AS 通过简单的omi关联AS关键字声明正常工作。

+2

这与Igor的解决方案相同。唯一的区别是,他在别名之前包含“AS”。 – 2012-07-30 11:33:38

+0

是的,我知道 - 我想我会这么说 - 这真的证明我的解决方案是正确的吗? – PJW 2012-07-31 13:08:27

+0

我很抱歉,但我不知道你在说什么。如果你的意思是有人低估了你的回答,那不是我。无论如何,我现在可以看到你的答案没有倒退,所以也许你的意思是别的。 – 2012-07-31 17:45:14