如何在 SQL 服务器中使用连接查询从 2 个表中删除

How to delete from 2 tables using join query in SQL Server

[Table 关系][1]

这是我的数据库的截图。

我想使用 Student_grade table 删除 Student table 中的所有数据,其中 Grade='FAIL'.

应从数据库中删除所有失败学生的信息。

Delete from Student
where Student_ID IN (Select Student_ID 
                     from Student_Grade 
                     where Grade = 'FAIL');

试过了,但没用。我认为应该同时从两个 table 中删除数据,因为当它从一个 Student table 中删除时,student_grade table 中没有 FK 的引用。

任何人都可以提供 SQL 服务器查询来执行此操作吗?

你不能一次性删除 2 tables。

将 studend_id 的列表保存在临时 table 中,然后使用它加入实际的 table 并一次删除一个。

-- put the list of Fail students in temp table #Fail
Select Student_ID INTO #Fail from Student_Grade where Grade='FAIL'

-- delete from grade table
DELETE g FROM #Fail f INNER JOIN Student_Grade g ON f.Student_ID = g.Student_ID

-- delete from student table
DELETE s FROM #Fail f INNER JOIN Student s ON f.Student_ID = s.Student_ID

我实际上喜欢 Squirrel 的临时方法 (+1)。它允许更复杂的选择标准。

也就是说,如果#temp 表是 "off-the-table",您可以执行以下操作:

Delete A
 From  Student A
 Join  Student_grade B on (A.Student_ID=B.Student_ID)
 Where B.Grade='Fail';

Delete From Student_grade Where Grade='Fail';

有两种方法。

第一种方式,使用多个DML时使用事务

begin try
begin tran

-- Child table
Delete From Student_grade Where Grade='Fail';

-- Parent table
Delete A
 From  Student A
 Join  Student_grade B on (A.Student_ID=B.Student_ID)
 Where B.Grade='Fail';



commit TRAN
end try
begin catch
if (@@Trancount>0)
rollback
end catch

另一种方法是使用

Delete Cascade

,如果你想直接删除父 table。 Delete data with foreign key in SQL Server table