在一个查询中使用左连接从多个表中删除

Jam*_*ees 0 sql t-sql sql-server

我想知道是否可以执行以下操作,我有 3 个要从中删除数据的表:Table1、Table2、Table3

总是会有一个记录Table1,有可能会或可能不会是一个相关的记录中Table2Table3

所以我想我可以做到以下几点:

DELETE FROM dbo.Table1, dbo.Table2, dbo.Table3
FROM Table1 t1
LEFT JOIN dbo.Table2 t2 ON t1.Id = t2.Id
LEFT JOIN dbo.Table3 t3 ON t3.Id = t1.Id
WHERE t1.Id = @Id;
Run Code Online (Sandbox Code Playgroud)

但我Incorrect syntax near ','.因为这DELETE FROM dbo.Table1, dbo.Table2, dbo.Table3条线得到了一个。

期望的结果是使用该Where子句删除 3 个表中的所有数据。

我不知道如何完成这个。

Gor*_*off 5

一次只能从一张表中删除。据推测,您需要级联约束:

alter table2 add constraint fk_table2_table1
    foreign key (id) references table1(id)
    on delete cascade;

alter tablee add constraint fk_tablee_table1
    foreign key (id) references table1(id)
    on delete cascade;
Run Code Online (Sandbox Code Playgroud)

外键确保数据完整性。级联约束意味着当主键被删除时,其他表中的相应行也被删除。