如何在 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
[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