在一条语句中从多个表中删除

ig9co6j1  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(240)

使用mysql我试图一次从多个表中删除多个记录。一开始我想做的是:

DELETE t1, t2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id
JOIN table3 t3 ON t1.id = t3.table1_id
WHERE t1.id IN (?,?,?,?);

但是,如果表2中没有现有记录,我会将连接更改为左连接吗?另外,如果我只删除八个表中的两个或三个记录(2x2),这样做会导致延迟吗?

qnakjoqk

qnakjoqk1#

是,更改上的联接 table2left join 会做你想做的事。中的行 table1 属于名单和 table3 将全部删除,无论它们是否也存在于 table2 . 同时,在 table2 也将被删除。

delete t1, t2
from table1 t1
left join table2 t2 on t1.id = t2.table1_id
inner join table3 t3 on t1.id = t3.table1_id
where t1.id in (?, ?, ?, ?);

我建议重写 jointable3 到一个 exists 而不是条件。这使得查询的意图更加明显,并且可能会执行得更好,特别是当您在上有索引时 table3(table1_id) :

delete t1, t2
from table1 t1
left join table2 t2 on t1.id = t2.table1_id
where 
    t1.id in (?, ?, ?, ?)
    and exists (select 1 from table3 t3 where t3.table1_id = t1.id)

相关问题