sql – 如何从包含自引用外键的表中删除数据

这适用于MS SQL 2005服务器.我有一个查询删除表中的所有孤立记录.但是,此表具有自引用FK.我也需要删除这些,但目前还不清楚如何这样做.当前脚本删除所有未在其他表中显示为FK的记录,但我没有考虑自己的表中的自引用FK.表很简单:

PK, FK, DAta
1, NULL, jibberjab
2, 1, jibberjab2
3, 1, skdfasfa

最佳答案 如果要有多个级别,可以使用公用表表达式来获取需要删除的ID,并在一个语句中处理孤立及其所有后代:

    WITH cte AS (
        SELECT pk
        FROM myTable
        WHERE id = 1  --pk to delete
        UNION ALL
        SELECT t.pk
        FROM myTable t
        JOIN cte c
            ON t.fk = c.pk
    )
    DELETE t
    FROM cte c
    JOIN myTable t
        ON c.pk = t.pk
点赞