想要在sql server中删除父id的所有递归子id.

use*_*315 2 sql-server-2008

ManagerID EmployeeID Title                         Level
--------- ---------- ----------------------------- ------
NULL      1          Chief Executive Officer       0
1         273        Vice President of Sales       1
273       16         Marketing Manager             2
273       274        North American Sales Manager  2
273       285        Pacific Sales Manager         2
16        23         Marketing Specialist          3
274       275        Sales Representative          3
274       276        Sales Representative          3
285       286        Sales Representative          3
Run Code Online (Sandbox Code Playgroud)

我想要一个递归删除与employeeID匹配的数据的查询与managerID.例如,当我删除带有1个值的employeeID时,它应删除managerID为1并再次递归检查managerID 1 = 273 EmployeeID并比较该273 ManagerID并找出employeeID为16,依此类推.假设我们递归地删除子id与parentid相比,就像在购物车中一样,当我们删除父类时,它会递归删除所有产品及其子产品.

Adr*_*der 5

你可以试试像

DECLARE @EmployeeID INT = 1
;WITH Vals AS (
  SELECT *
  FROM Table1
  WHERE EmployeeID = @EmployeeID
  UNION ALL
  SELECT t1.*
  FROM Table1 t1 INNER JOIN
  Vals v ON t1.ManagerID = v.EmployeeID
 )
DELETE
FROM Table1
WHERE EmployeeID IN (SELECT EmployeeID FROM Vals)
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle DEMO

  • 感谢您提供如此干净优雅的解决方案。 (2认同)