2011-02-18 82 views
0

我有三個表中的一個存儲用戶基本信息,另外一個是配置文件信息,最後一個是存儲用戶圖片。刪除內部連接3個表

當我刪除這些用戶時,我需要刪除這些表中的所有數據。所以我寫這樣的查詢。

DELETE Kullanicilar FROM Kullanicilar 
INNER JOIN ProfilBilgileri ON Kullanicilar.ID = ProfilBilgileri.UyeID 
INNER JOIN UyeResim ON Kullanicilar.ID = UyeResim.UyeID 
WHERE [email protected] 

但它只是從「Kullanicilar」表刪除數據。
有什麼建議嗎?

編輯:我使用MSSQL 2008,但託管公司2000,所以我需要兼容的代碼。

+0

爲什麼不使用觸發器? – Xavinou 2011-02-18 15:55:41

+0

一些人說使用觸發器是有風險的,所以我沒有使用。 – 2011-02-18 15:58:35

+0

`sql`是一個通用標記,你的意思是`sql``sql-server`嗎? – Fionnuala 2011-02-18 16:01:42

回答

5

您可以使用類似Xavinou的觸發器,或者如果表中有外鍵,則可以使用級聯上的刪除選項。您的外鍵將使用此創建:

FOREIGN KEY ([Id]) REFERENCES AnotherTable 
ON DELETE CASCADE 
4

想到的解決方案是使用事務。

BEGIN TRANSACTION 

DELETE FROM Kullanicilar WHERE ID = @ID 
DELETE FROM ProfilBilgileri WHERE UyeID = @ID 
DELETE FROM UyeResim WHERE UyeID = @ID 

COMMIT TRANSACTION 
0
declare @pbid int 
declare @urid int  
SELECT @pbid = ProfilBilgileri.UyeID, @urid = UyeResim.UyeID FROM Kullanicilar INNER JOIN ProfilBilgileri ON Kullanicilar.ID = ProfilBilgileri.UyeID INNER JOIN UyeResim ON Kullanicilar.ID = UyeResim.UyeID WHERE [email protected] 

delete Kullanicilar where ID = @ID 
delete ProfilBilgileri where UyeID = @pbid 
delete UyeResim where UyeID = @urid 

當然,我假設有Kullanicilar和其他兩個表之間存在1對1的對應關係。如果它是一對多的,那麼您需要爲每個其他表創建一個臨時表並根據該表刪除它。希望這能指出你正確的方向!