mysql - 在一个查询中从一个或两个表中删除

标签 mysql

我有两个 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/

相关文章:

MySQL 工作台 : dumping whole data base in one sql file

mysql - 附加查询参数不起作用

c# - 在从池中获取连接之前经过的超时时间

php - 在数据库中保存 wordpress 联系表 7 提交

java - 使用CacheJdbcPojoStoreFactory加载缓存时出现异常

php - Laravel 不同的对象 groupBy

Mysql group_concat 里面还有总和

c# - 将数据表自动增量列与数据库同步

java - 如何根据行数删除数据库表行

c++ - mysql c++ 连接器链接错误