从多个表中删除时MySQL查询问题

时间:2014-12-08 03:15:43

标签: mysql sql

我有一个简单的数据库如下。它将员工映射到他们所属的部门。当员工离开时,需要从Employee表和EmployeeDepartment表中删除他们的记录。同样,部门也可以改变。部门更改时,需要从DepartmentEmployeeDepartment表中删除记录。

我有一个主要是的查询。但是,当其他记录开始被删除时,我确实发现了一些错误。我希望有人可以帮我查一下。

DELETE e, ed FROM Employee e 
INNER JOIN EmployeeDepartment ed ON e.id = ed.id
WHERE ed.id = ?

?是我要删除的记录的ID。

修改

要进一步说明,如果EmployeeDepartment中的ID都不在,则删除功能将无效。因此,如果已创建员工但尚未分配给部门,则删除将无效。

2 个答案:

答案 0 :(得分:0)

这应该做你想要的:

DELETE e, ed FROM Employee e 
LEFT JOIN EmployeeDepartment ed ON e.id = ed.id
WHERE e.id = ?

请注意,您必须与Employee匹配,因为您说EmployeeDepartment并非保证有记录。

但是,我认为没有理由将此作为单个查询。它增加了复杂性,没有真正的好处。使用两个查询并将它们包装在事务中以使它们成为原子。启动一个事务,从Employee删除,然后从EmployeeDepartment删除,然后提交。

答案 1 :(得分:0)

您在同一个Employee表中是否有'e'和'ed'列? 如果没有,试试这个:

DELETE e.*, ed.* FROM Employee e 
LEFT JOIN EmployeeDepartment ed ON e.id = ed.id
WHERE e.id = ?

如果这没有帮助,请使用ON DELETE CASCADE选项在表上定义外键约束。

然后从父表中删除记录将从子表中删除记录。

点击此链接:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html