zoukankan      html  css  js  c++  java
  • You can't specify target table 'ship_product_cat' for update in FROM clause

    有时候我们在编辑update时需要select作为条件,在mysql中有时会出现这样的错误:You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。

    例如下面这个sql:

    UPDATE ship_product_cat SET is_parent = 0  WHERE id in(
    SELECT id FROM ship_product_cat WHERE name in('Control','Propeller/Shaft')
    );

    错误信息:

    [SQL]UPDATE ship_product_cat SET is_parent = 0 WHERE id in(
    SELECT id FROM ship_product_cat WHERE name in('Control','Propeller/Shaft'));
    [Err] 1093 - You can't specify target table 'ship_product_cat' for update in FROM clause

     解决方法——换成下面的SQL就可以了 

    UPDATE ship_product_cat SET is_parent = 0  WHERE id in(
    SELECT a.id FROM
    (SELECT id FROM ship_product_cat WHERE name in('Control','Propeller/Shaft'))a
    );

    也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。

     这个错误会出现在mysql中,但不会出现在oracle中。

  • 相关阅读:
    C#、.NET Framework、CLR的关系
    C# out和ref区别
    声明式事务管理
    SSH项目搭建后的简化
    SSH项目的搭建
    SSH的框架整合
    Swift
    如何下载String jar包
    SSH(struts2,spring4,hibernate5)详解
    SSH框架的简化(struts2、spring4、hibernate5)
  • 原文地址:https://www.cnblogs.com/wql025/p/5626500.html
Copyright © 2011-2022 走看看