mysql互换表中两列数据
解决方案
使用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互换表中两列数据的更多相关文章
- mysql互换表中两列数据方法
1.创建表及记录用于测试 ) unsigned ) ,) unsigned ,) unsigned NOT NULL COMMENT '现价', PRIMARY KEY (`id`) ) ENGINE ...
- 对一个表中所有列数据模糊查询adoquery
如何用adoquery对一个表中所有列进行模糊查询: procedure TForm3.Button4Click(Sender: TObject); var ASql,AKey: string; I: ...
- mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享
原文地址:http://www.maomao365.com/?p=7335 摘要: 数据表中,有一列是自动流水号,由于各种操作异常原因(或者插入失败),此列数据会变的不连续,下文将讲述使用sql ...
- MySQL设置表中字段的数据唯一性
mysql设置数据库表里的某个字段的数据是唯一的 ALTER TABLE 表名 ADD unique(`表中的字段`)
- Sqlserver将表中某列数据以符号分成多行
WITH testtb2 AS ( UNION ALL ) ) ) ) ) PERCENT SUBSTRING(VisitorCard, STA - LENS, LENS) AS OrderReque ...
- 如何实现MySQL表数据随机读取?从mysql表中读取随机数据
文章转自 http://blog.efbase.org/2006/10/16/244/如何实现MySQL表数据随机读取?从mysql表中读取随机数据?以前在群里讨论过这个问题,比较的有意思.mysql ...
- 备忘:MySQL中修改表中某列的数据类型、删除外键约束
-- MySQL中修改表中某列的数据类型 ALTER TABLE [COLUMN] 表名 MODIFY 列名 列定义; -- 删除外键约束 SHOW CREATE TABLE 表名; -- 复制CON ...
- MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容
MySQL将一张表的某些列数据,复制到另外一张表 INSERT INTO t_topic_content(content,topicId) SELECT content,id FROM t_topi ...
- CSV文件插入到mysql表中指定列
参考资料: -CSV文件插入到mysql表中指定列
随机推荐
- (转)Java多线程之Lock的使用 (待整理)
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...
- swift 3.0 基础练习 面向对象 类的扩展
要求 为NSString类添加split功能 为NSString类添加一个函数func split(splitStr: NSString)-> [NSString],split是把字符串以特定的 ...
- 关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
优化方案 1.安装Application Initialization 这是在iis8出来后才有的,iis8内置的功能,而对于iis7.5也提供了一个扩展以支持这个功能. Application In ...
- 【原创】Easyui tree filter 过滤本地数据无效的原因
Easyui tree filter 过滤本地数据无效的解决方式 正确使用方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- Java 字符串截取问题
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4 public class StringSplit ...
- vue-resource pos提交t数据时碰到Django csrf
最近在用Vue写前端代码,再用vue-resource向后台提交数据.项目后台是用python+Django开发的.下面我就复盘一下我出现问题的经过. 首先,想用vue进行数据交互只能引入vue-re ...
- AdPlayBanner:功能丰富、一键式使用的图片轮播插件
AdPlayBanner:功能丰富.一键式使用的图片轮播插件 AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresc ...
- 教你如何反编译app,拿到加密方式
大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个 准备好反编译设备 1.一套越狱的ios手机 我 ...
- python之禅 the zen of python
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is ...
- IOS开发之UITabBarController与UINavigationController混合使用
ios开发中UITabBarController与UINavigationController混合使用是很多app的基础页面结构,下面是简单的的页面初始化的方法,在AppDelegate.m的 - ( ...