我有这张表:
OrderItems.OrderId上有外键,没有订单商品可以订购。我想删除某些用户的所有订单和订单ietms。这个带内连接的sql运行正常:
DELETE o, oi
FROM Orders o
JOIN OrderItems oi ON o.OrderId = oi.OrderId
WHERE o.UserId = 11
但它不会删除没有订单商品的订单(内部联接)。但是使用左连接的SQL查询
DELETE o, oi
FROM Orders o
LEFT JOIN OrderItems oi ON o.OrderId = oi.OrderId
WHERE o.UserId = 11
抛出错误
无法更新或删除父行。
怎么了?是否可以在一个查询中删除用户的所有订单(包含项目和没有订单)?
答案 0 :(得分:1)
Here解释为
如果使用涉及有外键约束的InnoDB表的多表DELETE语句,MySQL优化器可能会按照与父/子关系不同的顺序处理表。在这种情况下,语句失败并回滚。相反,您应该从单个表中删除并依赖InnoDB提供的ON DELETE功能来使其他表相应地进行修改
所以我只是使用后续删除。