我面臨一個問題。假設我有 3 張桌子:
A [ID_A]
B [ID_A, ID_C]
C [ID_C]
經典的多對多關系。
我想洗掉 C 中的一行,并且所有關聯的 A 都只與 C 關聯。要清楚:
[a1, a2, a3]
[[a1, c1], [a2, c1], [a1, c2]
[c1, c2]
我想洗掉 c1 和 a1,而不是 a2,因為 a2 也與 c2 關聯,而不是 a3,因為 a3 沒有與 c1 關聯。
我面臨的問題是訂單問題。
- 我不能先洗掉B,因為如果我洗掉B,我會丟失關于A和c1之間關聯的資訊。
- 由于外鍵,我無法洗掉 c 或 a first。我無法更改資料庫以添加級聯。
- 我不能洗掉所有“沒有關系a”,因為我想保留a3
我覺得有一個明顯的解決方案,但我無法找到它......
uj5u.com熱心網友回復:
正如@SOS 在評論中提到的那樣,您可以OUTPUT在洗掉時使用該子句B來捕獲A. 然后,您洗掉任何關聯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';
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431791.html
