mysql怎么互换表中两列数据
admin
2023-05-16 08:22:01
0

解决方案

使用update命令,这完全得益于MySQL SQL命令功能的强大支持。

表格中原来数据类似如下:

select * from product; +----+--------+----------------+--------+| id | name   | original_price | price  | +----+--------+----------------+--------+|  1 | 雪糕   |           5.00 |   3.50 | |  2 | 鲜花   |          18.00 |  15.00 | |  3 | 甜点   |          25.00 |  12.50 | |  4 | 玩具   |          55.00 |  45.00 ||  5 | 钱包   |         285.00 | 195.00 |

现在要求互换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怎么互换表中两列数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

相关内容

热门资讯

日本最新民调公布:76%民众支... 日本《琉球新报》2日报道,日本舆论调查协会8月1日公布的一项最新民意调查结果显示,76%的日本民众认...
疯狂降智的谷歌,彻底沦为“美国... 如果要问,现在谁家的AI能力最强?ChatGPT、Claude、DeepSeek各有千秋,吵上三天三...
公职人员婚内多次向他人转账52... 8月2日,安徽亳州市城市管理局发布情况通报:近日,有媒体报道我局下属园林建设管理服务中心主任白某某涉...
特朗普抨击“亲密盟友”:不知道... 【环球网报道 记者 索炎琦】在美国总统特朗普推动下,华盛顿林肯纪念堂前的倒影池6月初被改造为“蓝底”...
浙江做小程序浙江做小程序定制的... 在浙江地区,浙江做小程序浙江做小程序定制通常被企业视为连接线上业务与线下服务的技术手段。无论是零售商...
雷军说「晚安」被指营销,小米高... 7月30日晚,小米举办“澎程”技术发布会,推出全新“小米昆仑技术架构”及澎程系列增程双车。 发布会结...
雷军谈澎程全系“不挑油”,网友... 近日,小米创始人雷军在社交平台发文表示,小米澎程增程新车全系支持92号、95号、98号汽油,该内容发...
谷歌Gemini Spark智... IT之家 8 月 2 日消息,谷歌于 7 月 31 日宣布将 Gemini Spark 智能体开放给...
蓝牙耳机杀死了手机音质,这并非... 关于手机音质这事儿肯定得从苹果说起。 2016年iPhone 7发布会上,库克一脸这是勇气的表情,把...
顾客报警“大盘鸡怎么能有土豆,... 大盘鸡是不少人喜爱的大众美食,近日,上海市公安局宝山分局杨行派出所的90后社区民警陈嘉文,因为一次关...