在ORACLE中用A表中的某几列去更新B表的某几列(B表的这几列都不允许为空),如果B表中的记录数超过A表的记录数,按照如下UPDATE语句运行时ORACLE产生如下错误:无法将B表的列更新为NULL,是否在ORACLE中使用子查询进行UPDATE时B表的数量不能超过A表?
update B
set
(serv_id, product_id )=
(select serv_id, product_id
from A where khdjls = B.khdjls and zxxh = B.zxxh
);
update B
set
(serv_id, product_id )=
(select serv_id, product_id
from A where khdjls = B.khdjls and zxxh = B.zxxh
);
解决方案 »
- 如何根据“列名”查询索引名 或者根据 “索引名 查询 列名
- Oracle rac 安装clusterware 出错oui-25031错误。请大虾赐教
- 如何创建与视图同名的表?
- php 调用 oracel 自定义函数问题???
- 请教一下Oracle 时间字段为空的比较
- 请教一个触发器和vc程序的冲突问题!
- 100分求一巨难页而且很实用的SQL语句!!
- 郑州市急需oracle专家支持!
- 用管理员帐号连接数据库和普通用户帐号连接数据库对系统性能有没有影响?
- oracle10g-经常出现TNS-12505和TNS-12514错误
- oralce 行列转换的问题
- 一个关于oracel计算周末数的问题!!急啊!我们头等着要结果呢!
set
(serv_id, product_id )=
(select serv_id, product_id
from A where khdjls = B.khdjls and zxxh = B.zxxh
) where exists select 1 from A where A.khdjls = B.khdjls and A.zxxh = B.zxxh你那句的意思除了更新相同的记录外,还将B表中存在的,A表中不存在的主键的行全部置成空
select id,name from a;
id , name
1 aaa
2 bbb
3 cccselect id,name from b;
1 aa
2 bb
3 cc
4 ddupdate b set name = (select name from a where a.id = b.id);执行后
select id, name from b;
1 aaa
2 bbb
3 ccc
4
你可以自己去试试看你这种更新最好是这么写,如果khdjls 和 zxxh 存在联合主键的话
update (select a.serv_id serv_idA, a.product_id product_idA,b.serv_id serv_idB, b.product_id product_idB from A ,B where a.khdjls = B.khdjls and A.zxxh = B.zxxh ) set serv_idB,product_idB = serv_idA,product_idA;