MySQL 批量修改某一列的值为另外一个字段的值
2024-08-27 00:30:49
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的值。更新的时候,会自动取出其中的值来进行更新。
最新文章
- Ubuntu下的MySQL安装
- C# redis使用
- CSS VS JS动画,哪个更快[译]
- HTTP 错误 500.19 - Internal Server Error 错误解决
- 客户端配置文件tnsname.ora
- [转]mysql-5.6.17-win32免安装版配置
- bzoj 2741 分块+可持久化trie
- codeforces 598B Queries on a String
- robot framework 怎么点击文本总结
- ASP.NET Aries 高级开发教程:主题样式及多语言(标签化控制)
- Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
- 漫画:SOA中怎样确定服务的粒度?
- centos6.7 配置外网端口映射
- LOJ#2245 魔法森林
- 基于git命令的代码统计方法
- SQL注入之重新认识
- A1069. The Black Hole of Numbers
- 在Raid模式下装Win10找不到固态硬盘怎么办
- Tidb数据库报错:Transaction too large
- 非微信内如何调起wap版微信支付
热门文章
- 关于.NET字符串驻留的问题
- 解决“Eclipse中启动Tomcat后,http://localhost:8080/无法访问”的问题
- esxi网络中虚拟机的相关操作
- LeetCode算法题-Merge Sorted Array(Java实现)
- PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)
- 我的游戏学习日志3——三国志GBA
- 基于python的Selenium使用小结
- Gulp的简单使用
- 5.04-requests_cookies
- 【足迹C++primer】32、定制操作_2