使用3个表的内部联接删除

时间:2011-02-18 15:53:46

标签: sql sql-server tsql sql-server-2000

我有三个表,其中一个存储用户的基本信息,另一个是个人资料信息,最后一个是存储用户图片。

当我删除这些用户时,我需要删除这些表中的所有数据。所以我写了这样的查询。

DELETE Kullanicilar FROM Kullanicilar 
INNER JOIN ProfilBilgileri ON Kullanicilar.ID = ProfilBilgileri.UyeID 
INNER JOIN UyeResim ON Kullanicilar.ID = UyeResim.UyeID 
WHERE Kullanicilar.ID=@ID

但它只是删除了“Kullanicilar”表中的数据 有什么建议吗?

编辑:我正在使用MSSQL 2008但托管公司2000所以我需要兼容的代码。

3 个答案:

答案 0 :(得分:5)

您可以使用Xavinou建议的触发器,或者,如果表中有外键,则可以使用“在Cascade上删除”选项。您的外键将使用以下方式创建:

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

答案 1 :(得分:4)

想到的解决方案是使用交易。

BEGIN TRANSACTION

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

COMMIT TRANSACTION

答案 2 :(得分: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 Kullanicilar.ID=@ID

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

当然,我假设Kullanicilar与其他两张桌子之间存在一对一的对应关系。如果是1对多,则需要为每个其他表提供临时表,并根据该表进行删除。希望这能指出你正确的方向!