2010-01-05 124 views
10

我正在處理一些相當敏感的數據,所以我想絕對確定我正在做它。從表中刪除數據,通過兩個表連接

我試圖在與另一臺

表關聯的唯一方式是通過其他兩個表加入相關的表中刪除的行...

這裏是準確的查詢:

DELETE tt.Transaction_Amount, tt.Transaction_ID 
    FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 

正如你所看到的,它並不漂亮。

我發現了一個奇怪的錯誤,雖然通過MySQL查詢瀏覽器...

未知表「TRANSACTION_AMOUNT」在多張刪除

我試着閱讀MySQL手冊,它似乎這應該對我工作...任何人有任何想法的?

+0

您似乎沒有使用您在查詢中其他位置加入的事務表。這是故意的嗎? – 2010-01-05 20:42:03

+0

確保在刪除之前備份了數據/數據庫。 – 2010-01-05 20:42:14

+0

是Transaction_Type一個表嗎?它看起來像你試圖從表中刪除2列而不是行... – 2010-01-05 20:44:46

回答

23

你需要從tt刪除行,而不是單獨的列:

DELETE tt 
    FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 
+0

謝謝!它工作完美=) – 2010-01-05 20:47:23

+0

你必須指定表刪除,無論是名稱或別名,在'刪除'和'FROM'多表刪除 – 2010-01-05 20:48:24

+0

@ md5sum:這是爲多表刪除,但我也不知道在這個例子中是否會產生差異 – 2010-01-05 20:48:40

0

您應該將其初始化爲查詢以返回感興趣的行。一旦完成全部調試,然後將其轉換爲刪除。

+0

我有。選擇工作正常。 – 2010-01-05 20:43:19

1

語法不正確 - 您在DELETEFROM之間don't reference columns。用途:

DELETE FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 

爲了確保您刪除正確的東西,我同意wallyk,你應該檢查SELECT語句的輸出,什麼是返回是你想之前刪除的內容。否則,請在事務中執行刪除操作,以便在需要時將其回滾。

+1

不要以爲這會奏效 - 請查看我對上述評論的回覆。 – 2010-01-05 20:48:57

0

檢查與選擇查詢,然後執行刪除查詢的關鍵數據得到該表的備份之前。如此簡單,就好像任何事情出錯了,那麼你至少可以備份。