如何从多个表中删除重复的外键?

时间:2018-03-01 14:33:29

标签: mysql sql

我正在编写一个查询,根据表X 中的外键,在一个表表A 中查找重复结果。 表A 的主键是3个其他表的外键,表B +表C +表D

有没有办法可以编写单个脚本来删除3个表的第一行(top)行(表BCD )使用FK然后表A (通过表X 的FK)。

希望这有道理,很难解释!!

表A

Primary Key                                   Foreign Key                   IsActive

a64c3cae-8474-4c4e-8108-14898b8b5319    3b7c82d9-bbbe-4504-9dfd-e01614d12ff6    1

表B

Primary Key                                       Foreign Key               IsActive
998852b4-6d2a-47e0-b9c3-497548b8b5c6    a64c3cae-8474-4c4e-8108-14898b8b5319    1

表C

Primary Key                                 Foreign Key                     IsActive
0966f8e6-4c29-4e5a-8b59-5ac413557392    a64c3cae-8474-4c4e-8108-14898b8b5319    1

表D

Primary Key                                     Foreign Key                 IsActive
f8c30ff5-498f-4e34-90c5-814bc5cf46ef    a64c3cae-8474-4c4e-8108-14898b8b5319    1

表X

Primary Key                             Name    InTables
3b7c82d9-bbbe-4504-9dfd-e01614d12ff6    Bob         4

谢谢, 萨姆

1 个答案:

答案 0 :(得分:0)

您可以在一个查询中执行此操作:

DELETE A, B, C, D
FROM TableA A
LEFT JOIN TableX X ON X.PK = A.FK
INNER JOIN TableB B ON B.FK = A.PK 
INNER JOIN TableC C ON C.FK = A.PK
INNER JOIN TableD D ON D.FK = A.PK;

但是,这不是一个好习惯,因为您可以使用外键CONSTRAINT ON DELETE CASCADE来提高效率。它只是将外键链接到链接的主键,如果删除链接的主键,任何链接的外键也将被删除。

Review this post to know more