使用内部联接删除行

时间:2013-03-25 07:20:49

标签: sql sql-server

我想使用单个查询从4个表中删除数据。

delete e1,e2,e3,e4 FROM sas.RolesInMenuOperations as e1 INNER JOIN
sas.RolesMenus as e2 ON e1.RoleMenuId = e2.Id INNER JOIN
sas.RolesInModules as e3 ON e2.RolesInModulesId = e3.Id INNER JOIN
sas.Roles as e4 ON e3.RoleId = e4.Id
where e4.Id=5

这是我到目前为止所做的。我在推荐this链接 是否可以使用连接从4表中删除数据。 如何实现这个或者我想写4个不同的查询?

虽然此查询可以正常使用

delete e1 FROM sas.RolesInMenuOperations as e1 INNER JOIN
sas.RolesMenus as e2 ON e1.RoleMenuId = e2.Id INNER JOIN
sas.RolesInModules as e3 ON e2.RolesInModulesId = e3.Id INNER JOIN
sas.Roles as e4 ON e3.RoleId = e4.Id
where Roles.Id=5

2 个答案:

答案 0 :(得分:2)

所以你在寻找MS SQL语法? 这样的事情有效:

DELETE table 
FROM table a
INNER JOIN table_b b on b.id = a.id
WHERE [my filter condition]

因此,如果你想要删除更多的表行,你需要创建更多的语句并解雇它们。我想。

答案 1 :(得分:2)

您无法在SQL Server中使用单个查询删除多个表数据。 最好的概念是在相对表中给出FK并使用 ON DELETE CASCADE 或使用单个查询从多个表中删除。