共有三张表:company(公司)、department(部门)、subdivision(细分)。请帮我写一个这样的查询:删除id = 2的公司“Hooves”,因为没有这样的公司,然后分别删除id_company = 2的部门,对于每个要删除的部门,删除所有子部门。
例如,我想出了如何从链接表中删除DELETE FROM Department WHERE id_company = 2
,但是如何删除要删除的部门的细分(细分)?
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "Company" (
"id" INTEGER,
"name_company" TEXT
);
CREATE TABLE IF NOT EXISTS "Department" (
"id" INTEGER,
"id_company" INTEGER,
"name department" TEXT
);
CREATE TABLE IF NOT EXISTS "Subdivision" (
"id" INTEGER,
"id_department" INTEGER,
"name_sub" TEXT
);
INSERT INTO "Company" VALUES (1,'Рога');
INSERT INTO "Company" VALUES (2,'Копыта');
INSERT INTO "Company" VALUES (3,'Енот');
INSERT INTO "Department" VALUES (1,2,'Отдел копыт');
INSERT INTO "Department" VALUES (2,1,'Отдел рогов');
INSERT INTO "Department" VALUES (3,3,'Енотный отдел');
INSERT INTO "Subdivision" VALUES (1,1,'Рога и нетолько');
COMMIT;
为此,使用外键级联删除:
在输出中,我们有一个级联删除。要检查的代码:
所有这些都可以在这里查看: https ://www.db-fiddle.com/f/rxrd88bNJL7S1uAhcJ4Up6/1
如果未设置级联删除,则可以从子查询中获取要删除的 Id:
在沙箱中
如果表是互连的,那么我认为启用级联删除更容易