有一个需求需要同步两张表的相同字段,比如表A和表B,这两张表是不同的用户下的表,表结构是一样的。

一开始我简单写了一个sql语句,如下:

update ord_log1 A
set
(A.pid, A.beg_ticket_no, A.end_ticket_no) =
(select B.pid, B.beg_ticket_no, B.end_ticket_no
from
newhl.ord_log B
where
A.mer_id = B.mer_id
and
A.ord_id = B.ord_id)
where
A.acct_date between '' and '');
commit;

运行一下,报错,ORA-01407:无法更新字段pid为NULL,想了一下,估计是表B中pid有NULL的值,而A表pid确实不能为NULL,于是加上条件B.pid is not null。运行一下,还是报同样的错,那就有点奇怪了。查看一下表B所有的pid的值,没有为NULL的啊,那是怎么回事。

找了很久,原来是外层的where条件符合的数据范围(X条记录)多余内层where的条件(Y条记录),这些超过的记录都会自动设置为NULL,所以一直报无法更新字段pid为NULL的错误。(参考http://blog.itpub.net/28602568/viewspace-2076239/)于是新的sql语句修改如下:

update ord_log1 A
set
(A.pid, A.beg_ticket_no, A.end_ticket_no) =
(select B.pid, B.beg_ticket_no, B.end_ticket_no
from
newhl.ord_log B
where
A.mer_id = B.mer_id
and
A.ord_id = B.ord_id
and
A.acct_date between '' and '')
where
exists
(select B.pid, B.beg_ticket_no, B.end_ticket_no
from
newhl.ord_log B
where
A.mer_id = B.mer_id
and
A.ord_id = B.ord_id
and
A.acct_date between '' and '');

运行,可以了。还是平时写sql语句比较少,没有什么经验啊。

Oracle:同步两张表的相同字段的更多相关文章

  1. 42. oracle通过两张表的一个字段对应,update其中一张表的某个字段

    update A a set a.A2 = (select b.B2 from B b where b.B1=a.A1) where exists (select 1 from B where B.B ...

  2. 关于跨DB增量(增、改)同步两张表的数据小技巧

    有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...

  3. Mysql两张表的关联字段不一致

    工作中遇到了一个问题,邮件系统群发失败,后来经过排查查找到了原因 原来是因为mysql中的两张表的关联字段竟然不一致, 表A mysql> desc rm_user_router;+------ ...

  4. Oracle将两张表的数据插入第三张表且第三张表中不存在

    1.由于是先查再插所以不能使用insert into table1() values(), 要使用insert into table1() select * table2,不能使用values. 2. ...

  5. Oracle 对比两张表不一样 的数据

    闲来无事,更一片博客,前几天有一个项目中有一个需求,用户通过excel导入数据,由于是通用的导入,所以导入的列的类型都为varchar,所以需要建一张中间表,使其列都为varchar类型,然后通过存储 ...

  6. sql两张表关联更新字段

    记录,推荐使用第三种,个人觉得比较好 --第一种写法,之前一直用,没有在意 UPDATE sr_t_TCodeUserReciveCfg SET fUserID=a.fUserID,fImportFl ...

  7. 获取oracle中某张表的各个字段名称

    select column_name from all_tab_columns where table_name='AT2_SSIS_CHNDB_CLIENT_INFO'

  8. Oracle中用一张表的字段更新另一张表的字段

    今天在做项目的过程中,发现开发库中某张表的某字段有许多值是空的,而测试库中该字段的值则是有的. 那么,有什么办法能将测试库中该字段的值更新到开发库中呢? SQL Server中这是比较容易解决的,而O ...

  9. KETTLE多表关联的同步一张表的两种实现方式

    以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:读取对方的多个视图或者表,写入目标库的一张表中,就涉及到多表的同步. 多表同步可以有以 ...

随机推荐

  1. Flutter-stack層疊樣式

    alignment調整佈局 var stack = new Stack( alignment: Alignment.center,//元素居中 //alignment: Alignment (1,1) ...

  2. URLEncode解决url中有特殊字符的问题

      问题:图片上传后的url地址中有&等特殊字符,页面传到后端时被自动处理成了&   解决:前端对url进行URLEncode,后端收到后进行URLDecode   总结:需要在请求u ...

  3. php strlen()函数 语法

    php strlen()函数 语法 作用:返回字符串的长度.大理石平台价格 语法:strlen(string) 参数: 参数 描述 string 必需.规定要检查的字符串.     说明:返回字符串的 ...

  4. Java继承基础版

    继承是软件开发中实现代码复用的有效手段,如果一个类A继承了类B那么类B中的public.protected及默认修饰符修饰的实例成员或静态成员将被类A继承,也可以说类B的成员就是类A的成员而类A在此基 ...

  5. TabController定义顶部tab切换

    前面通过DefaultTabController组件实现了AppBar里面的顶部导航切换,但是在项目中有数据请求,上拉加载更多等操作的时候,前面的写法,就不是很方便操作,因此,在flutter里面,还 ...

  6. celery的入门使用

    一.安装步骤 二.使用方法 三.和Django结合 四.部署和监控

  7. JSON字符串格式化为JSON对象

    根据项目需要,需要对json格式的字符串格式化为json对象,以下是解决方法: 参考文章:https://www.cnblogs.com/cailijuan/p/10150918.html

  8. HTML5移动应用——小心代码注入风险

    近日在加州举行的移动安全技术大会上,Syracuse大学的研究者的研究报告显示HTML5移动应用可能会给企业带来新的安全风险.开发者的错误可能导致HTML5应用自动执行攻击者通过Wifi蓝牙或短信发送 ...

  9. ADFS 2016 & Dynamics CRM

    参考:https://blog.csdn.net/vic0228/article/details/80188291 webapp 获取token https://adfs.demo.local/adf ...

  10. vue实现ajax请求(vue-resource和axios)

    1.vue-resouce实现ajax请求 vue1中主要用vue-resouce实现ajax请求, 2.1 引用vue-resouce 引入axios,直接在index.html文件中引入; 或者在 ...