MySql:使用左连接从多个表中删除

时间:2015-01-17 10:28:17

标签: mysql sql left-join

我有这张表:

  1. 订单:OrderId,UserId
  2. OrderItems:OrderId,Price
  3. 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
    

    抛出错误

      

    无法更新或删除父行。

    怎么了?是否可以在一个查询中删除用户的所有订单(包含项目和没有订单)?

1 个答案:

答案 0 :(得分:1)

Here解释为

  

如果使用涉及有外键约束的InnoDB表的多表DELETE语句,MySQL优化器可能会按照与父/子关系不同的顺序处理表。在这种情况下,语句失败并回滚。相反,您应该从单个表中删除并依赖InnoDB提供的ON DELETE功能来使其他表相应地进行修改

所以我只是使用后续删除。