Удалить с внутренним объединением через 3 таблицы - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть три таблицы, одна из которых хранит основную информацию о пользователях, другая - информацию о профиле, а последняя - изображение пользователя.

При удалении этого пользователя мне нужно удалить все данныеэти таблицы.Так что я пишу запрос, как этот.

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 ]

5 голосов
/ 18 февраля 2011

Вы можете использовать триггер, например Xavinou sugested, или, если у вас есть внешние ключи в ваших таблицах, вы можете выбрать опцию Удалить на каскад.Ваши внешние ключи будут созданы с использованием этого:

FOREIGN KEY ([Id]) REFERENCES AnotherTable
ON DELETE CASCADE
4 голосов
/ 18 февраля 2011

Решение, которое приходит на ум, заключается в использовании транзакции.

BEGIN TRANSACTION

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

COMMIT TRANSACTION
0 голосов
/ 18 февраля 2011
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: 1. Если это 1-ко-многим, вам понадобится временная таблица для каждой из других таблиц и удалите на основе этого. Надеюсь, это направит вас в правильном направлении!

...