2012-07-30 145 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