SQL 服务器:根据外键删除行

SQL Server : Delete rows based on foreign key

我遇到了问题。假设我有 3 个表:

A [ID_A]
B [ID_A, ID_C]
C [ID_C]

经典的多对多关系。

我想删除 C 中的一行,并且所有关联的 A WHERE A 仅与 C 关联。要清楚:

[a1, a2, a3]
[[a1, c1], [a2, c1], [a1, c2]
[c1, c2]

我想删除 c1 和 a1,而不是 a2,因为 a2 也与 c2 关联,而不是 a3,因为 a3 未与 c1 关联。

我遇到的问题是顺序问题。

我觉得有一个明显的解决方案,但我无法解决...

,您可以在从 B 中删除时使用 OUTPUT 子句来捕获 A 的任何相关 ID。然后删除任何关联的 A 记录,但排除仍与另一个 B 记录关联的任何记录:

DECLARE @tmp TABLE (ID_A);

DELETE b
FROM B b
OUTPUT deleted.ID_A
  INTO @tmp (ID_A)
WHERE b.ID_C = 'c1';

DELETE a
FROM A a
WHERE a.ID_A IN (
    SELECT t.ID_A
    FROM @tmp t
    EXCEPT
    SELECT b.ID_A
    FROM B b
);

DELETE c
FROM C c
WHERE c.ID_C = 'c1';