我有一个简单的数据库如下。它将员工映射到他们所属的部门。当员工离开时,需要从Employee
表和EmployeeDepartment
表中删除他们的记录。同样,部门也可以改变。部门更改时,需要从Department
和EmployeeDepartment
表中删除记录。
我有一个主要是的查询。但是,当其他记录开始被删除时,我确实发现了一些错误。我希望有人可以帮我查一下。
DELETE e, ed FROM Employee e
INNER JOIN EmployeeDepartment ed ON e.id = ed.id
WHERE ed.id = ?
?
是我要删除的记录的ID。
修改
要进一步说明,如果Employee
和Department
中的ID都不在,则删除功能将无效。因此,如果已创建员工但尚未分配给部门,则删除将无效。
答案 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