我有两个 MySQL 表:
programs versions
--------- ------------------------
id | name id | program_id | data
---+----- ---+------------+-------
1 | One 1 | 1 | OneFoo
2 | Two 2 | 1 | OneBar
3 | 2 | TwoBaz
versions.program_id
是外键。删除版本时,我还想删除关联的程序仅当要删除的版本是具有该program_id 的最后一个版本。例如,删除版本 1 不应删除任何程序,但删除版本 3 也应删除程序 2。
我正在这样做并且它有效:
DELETE FROM versions WHERE id = ?;
DELETE p FROM programs p
WHERE p.id = ?
AND NOT EXISTS (
SELECT 1 FROM versions v WHERE v.programId = p.id
);
是否有一种更有效的方法只需一个查询即可完成此操作?或者通过使用触发器?
最佳答案
使用触发器:
delimiter //
create trigger del
AFTER DELETE ON versions FOR EACH ROW
begin
DELETE FROM programs WHERE
programs.id = old.program_id
AND
NOT EXISTS (SELECT 1 FROM versions WHERE versions.program_id = old.program_id);
end
关于mysql - 在一个查询中从一个或两个表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42979455/