问题描述
我有 3 张桌子:
- user --> 主键 = user_id
- account --> 主键 = account_id
- user_account_join_table --> 外键 = user_id,外键 = account_id
当我只知道 user_id 时,如何从所有 3 个表中删除所有关联条目? 一个用户可以有多个帐户,我想删除用户和所有帐户 用一条 sql 语句,只知道 user_id。
解决方法
您可以使用cascading delete
,但如果您不会使用它,则使用事务来确保删除的完整性:
BEGIN TRANSACTION [Tran1]
BEGIN TRY
declare @userId int = 1; --your userId
declare @accountIds table (id int);
insert into @accountIds
select accountId from user_account where userId = @userId;
delete from user_account where userId = @userId;
delete from [user] where id = @userId;
delete from account where id in (select id from @accountIds);
COMMIT TRANSACTION [Tran1]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [Tran1]
END CATCH