mysql> select * from fruit;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | apple | 0 |
| 2 | banana | 0 |
| 3 | orange | 0 |
| 4 | mango | 0 |
| 5 | pomelo | 0 |
+----+--------+-------+
5 rows in set (0.00 sec)

  

  要求很简单,将上面fruit表的price列的值改为id列的值,比如第一条记录的price改成1(对应id)。

  刚开始,我很天真的这样想:

  1、用php或者其他的将所有记录都取出来

  2、然后每一条记录,单独修改一次

  这样就存在一个问题,效率并不高,首先,发请求、等待数据库执行,然后在迭代下一条记录。

  然后换了一种方法,就是下面这个语句:

mysql> update fruit a set price = (select id from fruit b where a.id = b.id);

  其实SQL语句写的特别明白,意思也没问题,但是,mysql不支持更改一种表,这种表就是在from子句中的表。

  所以,上面报错信息如下:

  ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause

公布答案:

  直接更新price=id  

mysql> update fruit set price=id;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0 mysql> select * from fruit;
+----+--------+-------+
| id | name | price |
+----+--------+-------+
| 1 | apple | 1 |
| 2 | banana | 2 |
| 3 | orange | 3 |
| 4 | mango | 4 |
| 5 | pomelo | 5 |
+----+--------+-------+
5 rows in set (0.00 sec)

  

  首先,我们在平常的update、insert、where筛选中,如果值的类型是字符串型,那么我们通常会使用引号将其括起来,但是我们并没有将字段名括起来。

  在上面这一条命令中,set price=id,其实id也是字段名,并不是id的值。更新的时候,会自动取出其中的值来进行更新。

MySQL 批量修改某一列的值为另外一个字段的值的更多相关文章

  1. MySQL中设置同一张表中一个字段的值等于另一个字段的值

    今天遇到了一个需求,我在一张表中新增了一个字段,因为这张表以前已经有很多数据了,这样对于以前的数据来说,新增的这个字段的值也就是为该字段的默认值,现在需要将新增的这个字段添加上数据,数据来源为同表的另 ...

  2. mysql批量修改某一列的值为另外的值

    sql语句 UPDATE tb_info SET org_id = 2170 WHERE org_id = 815

  3. SQL 批量修改一个字段的值为另一个字段的值

    AND create_time BETWEEN '2016-07-25 14:30:00' AND '2016-07-25 15:20:28'; AND create_time BETWEEN '20 ...

  4. mysql批量修改列类型-生成语句

    SELECT CONCAT( 'alter table ', table_name, ' MODIFY COLUMN ', column_name, ' float DEFAULT NULL;' ) ...

  5. MYSQL批量修改表前缀与表名sql语句

    修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', ta ...

  6. mysql 批量修改字段方法

    一.正式环境操作注意事项: .关闭应用访问或者设置数据库只读 mysql设为只读方法: 开启只读: mysql> show global variables like "%read_o ...

  7. MySQL批量修改相同后缀表名

    执行步骤 1.用concat批量生成修改表名的语句 SELECT CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO ', ,locate('_postfi ...

  8. SqlServer数据库设计一个字段的值是由其他字段运算结果所得

    最近在做项目时,发现数据库的一些字段不能执行sql语句进行修改,仔细观察才发现,它是由其他字段运算结果所得.这样就不需程序员通过代码执行运算结果更新数据库,感觉很实用,而网上教材好像还挺少的,所以把教 ...

  9. PHP多维数组根据其中一个字段的值排序

    平时简单的一维数组或者简单的数组排序这里就不多作介绍,这里主要是针对平时做项目中的可能遇到的情况,根据多维数组中的其中一个排序.用到的php函数是:array_multisort. 思路:获取其中你需 ...

随机推荐

  1. jQuery -- 光阴似箭(三):jQuery 操作 HTML 元素和属性

    jQuery -- 知识点回顾篇(三):jQuery拥有操作 HTML 元素和属性的强大方法. 1. 获取HTML 元素的内容和属性 (1) 获得内容:  text().html() 以及 val() ...

  2. Java程序设计教程(第2版)阅读总结

    为了重新拣起对Java的回忆,只好又找了本基础书.由于成都高新图书馆的计算机书实在不多,只能找到这本了.简单读了下Java部分,总结如下: 优点:虽然本书也是作者编的而不是作者著的,但是可以看出作者编 ...

  3. 《Java大学教程》—第5章 数组

    5.6 增强的for循环:访问整个数组,读取数组元素,不基于数据下列5.7 数组方法:最大值.求和.成员访问.查找 1.答:P92存储固定个数相同数据类型的一组元素. 2.答:P92所有存储在一个特定 ...

  4. Win7 下安装ubuntu14.04双系统

    下面介绍一下利用wubi在Windows中安装Ubuntu 14.04的教程,或者说安装方法和注意事项.  方法一:直接下载wubi.exe 方法二:直接下载ubuntu-14.04-desktop- ...

  5. 前端框架Vue.js——vue-i18n ,vue项目中如何实现国际化

    本项目利用  VueI18n 组件进行国际化,使用之前,需要进行安装 $ npm install vue-i18n 一.框架引入步骤: 1. 先在 main.js 中引入 vue-i18n. // 国 ...

  6. python3 内置函数

    '''iter()和next()'''# lst = [1, 2, 3]# it = iter(lst)# print(it.__next__())# print(it.__next__())# pr ...

  7. 操作循环的关键字switch,break,return的应用及区别

    break 使用break结束循环  break可以终止循环 和 switch语句的运行; break用于结束一个循环,即跳出循环体,执行循环体之后的代码: switch 使用continue提前结束 ...

  8. 在Sublime中配置JsFormat

    JsFormat配置文件: { // exposed jsbeautifier options "indent_with_tabs": false, // 保留换行符 " ...

  9. zabbix API应用

    1.模拟登录 curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0",& ...

  10. ORACLE存储过程中%TYPE和%ROWTYPE的区别

    ORACLE存储过程中%TYPE和%ROWTYPE的区别 在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量 因为 t_emp emp%rowtype ;这个语句的意思是 定义一个 ...