来自多个表的SQL DELETE

时间:2011-12-13 12:14:21

标签: mysql sql left-join join

当我尝试执行此删除查询时,SQL会给我这个错误:

“无法删除或更新父行:外键约束失败(carpoolingpedido,CONSTRAINT pedido_ibfk_1 FOREIGN KEY(ID_ROTA)参考{{1} }(rota))“

查询:

ID_ROTA

我正在尝试删除“pedido”和“rota_alerta”中的所有行,这些行通过“ID_ROTA”链接到一行表“rota”。这个“ID_ROTA”取决于表“rota”上具有相同“ID_UTILIZADOR”(在本例中为26)的行数。

另外,我想删除所有具有指定“ID_UTILIZADOR”的“rota”行。

我该如何解决这个问题?

修改

我忘了说我不想使用“级联约束”,因为在某些情况下我应该执行“删除rota,其中ID_UTILIZADOR = 26”(如注释中所述)并避免删除子行如果它们存在。

3 个答案:

答案 0 :(得分:3)

我先删除我的孩子收藏:

delete rota_alerta where rota_id in(select id_rota from rota where ID_UTILIZADOR=26)
delete pedido where rota_id in(select rota_id from rota where ID_UTILIZADOR=26)
delete rota where ID_UTILIZADOR=26

答案 1 :(得分:1)

将外键约束更改为CASCADE

好吧,从您给出的评论中可以清楚地看到级联删除是有条件的。

这意味着您需要编写确切的条件。在您的客户端或存储过程中。

或者仍然改为级联并再次添加触发器以防止删除(不确定在MySql中是否可以)

答案 2 :(得分:0)

查看cascade constraints子句