2010-08-27 112 views
4

我有三個表。 產品,公司,員工級聯刪除查詢

產品表的產品編號是公司 和CompanyId foregin重點公司的表是員工

foregin關鍵

所以從產品表中刪除產品編號,所有其他表中的相關記錄應刪除。但我無法觸及架構(不能使用alter table)。我應該如何寫在這種情況下,查詢..

回答

7

如果您不能添加約束傳播刪除,你必須寫所有必要刪除自己:

delete employee where companyid in (select companyid from company c where productid = xxx); 
delete company where productid=xxx; 
delete product where productid=xxx; 
+0

所以我需要寫3個查詢,不能在一個單一的? – Nits 2010-08-27 11:02:54

+0

不是。但是你可以圍繞這3個查詢編寫存儲過程。 – pascal 2010-08-27 11:17:09

+1

我認爲這是一個很好的理由。如果您想要級聯刪除,請使用「ON DELETE CASCADE」選項製作參考約束。但是在某些情況下,你根本就不想要這樣做,因爲刪除方式比預期更多的危險是很大的。例如,您絕對不希望僅僅因爲有人試圖刪除已售出的產品而刪除發票項目。如果DELETE語句中存在「CASCADE」選項,人們會在不知道造成多少損害的情況下使用它。 – 2010-08-27 11:36:34

0

嘗試使用此選項。我沒有環境來測試這個。我想有一些變化,它應該在你的最後。

DELETE Product,Company,Employee 
FROM 
user LEFT JOIN items ON product.productid = company.productid 
LEFT JOIN orders ON company.productid = product.productid 
WHERE product.productid = [$productid] 
+0

您不能將聯接放入刪除語句中 – 2015-03-03 13:48:16