我有3张桌子:
Files (primary key = FileID)
Accounts (primary key = AccountID)
AccFiles (2 fields: FileID and AccountID)
AccFiles
表将Files
表的主键链接到Accounts
表。
在我的场景中,如果有一个帐户记录,那么在Files表中也会有一个相应的File,并且在AccFiles
表中也会引用两个。我想这是一对一的关系。不幸的是,由于一个错误,一些文件被删除,但他们的帐户和AccFiles表中的记录没有。我需要编写一个SQL脚本,它将删除Accounts
表和AccFiles
表中不再有相应文件的记录(由Accfiles FileID
引用)。
我正在使用SQL Server,并且不知道如何执行此操作。有人可以帮忙吗?
答案 0 :(得分:2)
这将从AccFiles
表中不存在FileId
字段的File
中删除所有记录,然后删除Accounts
字段AccountId
中的所有记录AccFiles
表中不存在:
DELETE AccFiles
WHERE FileID
NOT IN
(
SELECT FileID
FROM Files
);
DELETE Accounts
WHERE AccountId
NOT IN
(
SELECT AccountId
FROM AccFiles
);