zoukankan      html  css  js  c++  java
  • MySQL 更新语句技巧

    一. 多表更新

    1. 数据准备

    mysql> mysql> select goods_id, goods_name,goods_cate from tdb_goods;
    
    +----------+---------------------------------------+---------------------+
    
    | goods_id | goods_name                            | goods_cate          |
    
    +----------+---------------------------------------+---------------------+
    
    |        1 | R510VC 15.6英寸笔记本                 | 笔记本              |
    
    |        3 | G150TH 15.6英寸游戏本                 | 游戏本              |
    
    |        4 | X550CC 15.6英寸笔记本                 | 笔记本              |
    
    |        7 | SVP13226SCB 13.3英寸触控超极本        | 超级本              |
    
    |        9 | iPad Air MD788CH/A 9.7英寸 WiFi版     | 平板电脑            |
    
    |       10 | iPad mini ME279CH/A 7.9英寸           | 平板电脑            |
    
    |       14 | AT7-7414LP 台式电脑                   | 台式机              |
    
    |       15 | Z220SFF F4F06PA工作站                 | 服务器/工作站       |
    
    |       16 | PowerEdge T110 II服务器               | 服务器/工作站       |
    
    +----------+---------------------------------------+---------------------+
    
    mysql> mysql> select *db_goods_cates;
    
    +---------+---------------------+
    
    | cate_id | cate_name           |
    
    +---------+---------------------+
    
    |       1 | 台式机              |
    
    |       2 | 平板电脑            |
    
    |       3 | 服务器/工作站       |
    
    |       4 | 游戏本              |
    
    |       5 | 笔记本              |
    
    |       6 | 超级本              |
    
    +---------+---------------------+
    View Code

    2. 将tdb_goods表中的goods_cate字段更新为tdb_goods_cates表的cate_id字段

      UPDATE tdb_goods g INNER JOIN tdb_goods_cates c ON g.goods_cate = c.cate_name SET g.goods_cate = c.cate_id;

    二. 更新过滤条件中包含自身的表

    1. 数据准备 

    -----------------------------------------------------------------------------
    
    mysql> select * from student;
    
    +----+--------+----------+---------+
    
    | id | name   | idCardNo | isCadre |
    
    +----+--------+----------+---------+
    
    |  1 | Tom    | 350020   |    NULL |
    
    |  2 | Jim    | 350022   |    NULL |
    
    |  3 | Lucy   | 460311   |    NULL |
    
    |  4 | Liming | 733098   |    NULL |
    
    +----+--------+----------+---------+
    
     
    
    mysql> select * from cadre;
    
    +----+--------+----------+
    
    | id | name   | idCardNo |
    
    +----+--------+----------+
    
    |  1 | Tom    | 350020   |
    
    |  2 | Max    | 636095   |
    
    |  3 | Liming | 733098   |
    
    +----+--------+----------+
    View Code

    2. 假设需要将student表中 与cadre表idCardNo字段相同的记录的isCadre更新为1

      通常我们会这样写:

      UPDATE student SET isCadre=1 WHERE student.idCardNo IN

          (SELECT s.idCardNo FROM student s INNER JOIN cadre c ON s.idCardNo=c.idCardNo);

      但是在MySQL中执行报错,“ERROR 1093 (HY000): You can't specify target table 'student' for update in FROM clause”,MySQL不支持这种过滤条件中包含自身的更新(Oracle可以)。

      正确的做法如下:

      UPDATE student a JOIN (SELECT s.idCardNo FROM student s INNER JOIN cadre c ON s.idCardNo=c.idCardNo) b

      ON a.idCardNo = b.idCardNo SET a.isCadre = 1;

      

  • 相关阅读:
    Pycharm的使用秘籍
    python 装饰器
    python继承和重写
    python中一切皆对象及__init__.py文件的使用
    python的参数类型与时序解包
    Jmeter使用计数器生成变量
    python unittest套件加载用例时,出现No tests were found,Empty test suite
    Python 执行tail文件并操作
    go 函数和流程控制
    go 数据类型和操作符
  • 原文地址:https://www.cnblogs.com/techroad4ca/p/5735064.html
Copyright © 2011-2022 走看看