按照条件在两个表之间拷贝数据 for mysql & sqlserver
2016-09-06 11:44
369 查看
业务讲解
alarmeventlog(简称ael)表示一条报警信息;alarmclientlog(简称acl)表示操作员对报警的处理记录,同一报警可能有多条处理记录。
ael与acl是一对多的关系,通过各自的strIndex和strUniqueTime关联。
acl.HandleTime表示每个操作员的处理时间。
现需要将acl中对应最新的一条记录拷贝到ael中去。
代码实现
因要支持两种数据库,且数据库之间存在语法限制,因此需要分别实现。mysql的实现
UPDATE alarmeventlog ael SET ael.nState = IFNULL( (SELECT acl.nState FROM alarmclientlog acl WHERE ael.strIndex = acl.strIndex AND ael.strUniqueTime = acl.strUniqueTime GROUP BY acl.strIndex ORDER BY acl.HandleTime), ael.nState );
语句讲解:
IFNULL(符合条件的结果,不符合条件的结果)
找到最新的一条记录: GROUP BY acl.strIndex -- 对应多条记录,分组以后可以拿到一条记录 ORDER BY acl.HandleTime -- 找到多条记录中时间最新的一条,在GROUP时将被选中
sqlserver的实现
UPDATE alarmeventlog SET alarmeventlog.nState = ISNULL( ( SELECT alarmclientlog.nState FROM alarmclientlog WHERE alarmeventlog.strIndex = alarmclientlog.strIndex AND alarmeventlog.strUniqueTime = alarmclientlog.strUniqueTime ), alarmeventlog.nState );
语句讲解:
ISNULL(符合条件的结果,不符合条件的结果)
注意:由于sqlserver语法限制,不能在子语句中使用GROUP BY和ORDER BY,因此ael中的结果将是acl中任意一条,而不是最新一条。
相关文章推荐
- MySQL两个数据库之间数据的拷贝
- 计算两个日期之间的天数----MySQL&SQL Server解决方案
- 用sqlserver 2008 比较两个mysql服务器的会员数据
- mysql两个错误:1067服务无法启动;1045 access denied for user 'root'@'localhost' using password yes
- mybatis 在mysql查询条件日期在某两个日期之间
- ETL数据从sqlserver到mysql之间迁移
- 如何在两个SQLSERVER之间数据同步
- 两个集群之间拷贝数据
- 新阶乘问题,有两个数a,b(a>=b),求a到b之间所有数的阶乘之和;数据有多组.
- 黑马程序员-Condition条件对象、Semaphore、CyclicBarrier、倒计时门栓 CountDownLatch、Exchanger(实现两个线程之间数据交换
- Mysql 如何查询两个时间段之间的数据?
- 如何在两个SQLSERVER之间实现数据同步
- 收取金额查询—日历控件&查询两个日期之间的数据
- 读取MYSQL中文数据乱码,解决data too long for column 'title' at row 1
- 两个activity之间传递数据用startActivityForResult方法。
- 如何在两个SQLSERVER之间数据同步
- 如何在两个SQLSERVER之间实现数据同步
- SqlServer查询介于两个值之间的数据记录
- Java程序两个数据表之间导数据mysql
- Mysql-两个表之间复制数据