首页 / MYSQL / mysql互换表中两列数据
mysql互换表中两列数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql互换表中两列数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2222字,纯文字阅读大概需要4分钟。
内容图文
![mysql互换表中两列数据](/upload/InfoBanner/zyjiaocheng/491/0c01d06ba77943a2b3feddfcd0935a90.jpg)
现在要求互换original_price与price的值,使用如下方法:
update
product
as
a, product
as
b
set
a.original_price=b.price, a.price=b.original_price
where
a.id=b.id;
验证一下:
select * from product; +----+--------+--------+| id | name | original_price | price | +----+------+--------+| 1 | 雪糕 | 3.50 | 5.00 | | 2 | 鲜花 | 15.00 | 18.00 | | 3 | 甜点 | 12.50 | 25.00 | | 4 | 玩具 | 45.00 | 55.00 || 5 | 钱包 | 195.00 | 285.00 |
扩展问题
上面直接使用update交换一个表中两列(自然是同一数据类型)的例子有一个特殊情况,其实也正是我要解决的真正问题。具体地说,我们的用户在初期准备的部分数据中对于表中的两列数据弄反了。但是,对于以后输入的数据却没有弄反。这种情况下,我们需要找出前面弄反的记录范围,然后针对这部分记录实施上面的操作。但遗憾的是,MySQL中的update语句是不支持limit子句的。官方正规的描述如下:
For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. Each matching row is updated once, even if it matches the onditions multiple times. For multiple-table syntax, ORDER BY and LIMIT cannot be used.
我试验了一下,的确如此。
无奈我们只能使用变通的办法。其中一个方法是,先把上面指定范围的记录选择出来并生成到一个临时表中,然后针对原表和这个临时表使用update语句实现交换上面范围记录中各个对应字段值的目的。
但这里有一个小插曲是:MySQL不直接支持类似于MS SQL Server的select into newtable这样的语句。不过,我们可以使用变通的其他语句实现,如下:
Create
table
tmp(
Select
*
from
mv_person2 limit 0,10);
上面语句的含义是,生成一个新表tmp,该表中的字段及值是另一个表mv_person2中从第1到第10条记录数据。这样便实现了上面生成一个临时表之目的。
有了上面的临时表tmp,再使用update语句实现交换表格mv_person2中指定范围(例如从第1到第10条记录数据)两列便轻松了。答案如下:
update
mv_person2
as
a, tmp
as
b
set
a.original_price=b.price, a.price=b.original_price
where
a.id=b.id;
从而间接实现了交换一个表中某指定范围内两列数据值之目的。
mysql互换表中两列数据
标签:header cannot update 例子 nta 特殊 针对 ted 特殊情况
本文系统来源:http://www.cnblogs.com/chenliangcl/p/7487928.html
内容总结
以上是互联网集市为您收集整理的mysql互换表中两列数据全部内容,希望文章能够帮你解决mysql互换表中两列数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。