重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
到底用b还是c来更新?或者有什么关系?
创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为市北企业提供专业的成都做网站、成都网站设计,市北网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
给你写一个用B更新A的吧:
update A set t = (select T from B where a.id = b.id)
where exists (select 1 from B where a.id = b.id and b.T is not null);
需要更新的表设为表1,数据表为表2,不知道你是要把表2的数据全部更新到表1中还是只更新表1中的部分字段。
可以用merge语句。
merge into 表1 a
using 表2 b
on (表1和表2的关系,例表1id =表2id)
where matched then update
set a.要修改的字段1 = b.要修改的字段1,a.要修改的字段2 = b.要修改的字段2,等等
--这里是将表表一的数据和表2做对比,更新条件是两表的id相同,当满足条件时,执行修改语句,将表1的数据字段改写为表2的
where not matched then insert
values(表2字段1,表2字段2,等等);
--这里是如果不满足条件,执行增加语句,将表2的数据插入到表1中
这里要注意,这两个表中字段名可以不同,但两表的数据类型要相同。
你可以先用别的表试下
数据类型都一样的么,可以考虑用触发器实现 以oracle数据库为例 有两张表test和test01 字段有id name age sal
create or replace trigger TRIG_UPDATE_TEST
after insert or delete or update on test
for each row
declare
l_id varchar2(50);
l_name varchar2(50);
l_age number;
l_sal number;
begin
if(deleting or updating) then
delete test01
where id=:old.id;
if(deleting) then
return;
end if;
end if;
l_id:=:new.id;
l_name:=:new.name;
l_age:=:new.age;
l_sal:=:new.sal;
begin
insert into test01(id,name,age,sal) values(l_id,l_name,l_age,l_sal);
end;
end TRIG_UPDATE_TEST;
再简化点就是在触发器中不声明变量,直接用:new.字段代替
哎,没分啊
请采纳。
你这叫更新吗,你如果要更新,两个表里都有id=7的,为什么7不就不更新了?
先确认好需求,如果是把7也更新
update name a set (a.大名,a.中名,a.小名)=(select b.大名,b.中名,b.小名 from nam b where a.id=b.id) where a.id in(select id from nam);
如果你只想更新1,2,3行,还不如把1,2,3行都删了,重新插入进去。
Oracle中不需要用join连接更新数据,连接表更新方法如下:
有以下两张表:
根据test2表中的id和test1表中的id关联,修改test1表中name字段,语句如下:
update test1 a set a.name=(select b.name from test2 b where a.id=b.id) where a.id in (select id from test2);
更新后,test1表中结果:
你大概是想用zJTQY表的值来更新t_cs_inhabitantrecord_new中的数据吧。在SQL Server等支持update from语句的数据中,直接用update from语句就可以实现,格式类似于:
update target_table
set target_field1 = update_value1, target_field2 = update_value2, ....
from reference_table
where update_conditions
但是,Oracle不支持update from语句,只能使用单个值更新,那么这样用:
update target_table
set (target_field1, target_field2, ...) = (select value_1, value_2, ... from ...)
where update_conditions
这里,要set子句中的查询结果只能有一个记录。