可以使用 join 语句来限定要删除的集合来进行删除,如下所示:
DELETE J
FROM Users U
inner join LinkingTable J on U.id = J.U_id
inner join Groups G on J.G_id = G.id
WHERE G.Name = 'Whatever'
and U.Name not in ('Exclude list')
不过,我有兴趣删除连接标准的两边——LinkingTable
记录及其所依赖的用户记录。我无法打开级联,因为我的解决方案是实体框架代码优先,并且双向关系形成多个级联路径。
理想情况下,我想要这样的东西:
DELETE J, U
FROM Users U
inner join LinkingTable J on U.id = J.U_id
...
从语法上讲,这是行不通的,但我很好奇这样的事情是否可能?
不,您需要运行多个语句。
因为您需要从两个表中删除,所以请考虑创建一个匹配 ID 的临时表:
SELECT U.Id INTO #RecordsToDelete
FROM Users U
JOIN LinkingTable J ON U.Id = J.U_Id
...
然后从每个表中删除:
DELETE FROM Users
WHERE Id IN (SELECT Id FROM #RecordsToDelete)
DELETE FROM LinkingTable
WHERE Id IN (SELECT Id FROM #RecordsToDelete)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)