sql – 如何从多个表中删除数据?

我有这些表:
event     (evt_id,evt_code,reg_id)

magnitude (mag_id,evt_id,value)

trace     (trace_id,pt_id)

point     (pt_id,evt_id)

我想从与evt_id = 1139相关的所有表中删除所有行.
我该怎么做?

解决方法

如果您可以控制模式,我将使模式使用 cascading deletes.

文章(为您的例子翻译更相关的部分)

CREATE TABLE point
(
    pt_id integer PRIMARY KEY,evt_id integer REFERENCES event ON DELETE CASCADE
)

如果您设置了级联,则可以从主事件表中删除,所有其他表将自动清除

否则,首先需要删除所有引用,然后删除主表.您应该在一个事务中执行此操作以保持数据一致

BEGIN;
DELETE FROM trace WHERE EXISTS 
    (SELECT 1 FROM point WHERE evt_id = 1139 AND trace.pt_id = point.pt_id);
DELETE FROM point where evt_id = 1139;
DELETE FROM magnitude where evt_id = 1139;
DELETE FROM event where evt_id = 1139;
COMMIT;

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...