紧急!如何用一条SQL语句同时更新两张表中关联记录的字段

时间:2022-07-19 15:08:37
两张表,有字段关联.现在需要用一条update语句同时分别更新表A中的字段1和表B中的字段2,赋予不同的值,这个语句怎么写?

10 个解决方案

#1


不行吧,只能分两次更新,

如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表

#2


--SQL不支持这种更新

--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段

update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段

#3



这样算不算一条语句?

str="update a set col1=xxx from a join b on a.col0=b.col0 update b set col2=yyy from a join b on a.col0=b.col0"

conn.execute str

#4


--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2


--下面是示例

--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'

create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go

--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go

--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段

--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go

--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go

--显示更新结果
select * from ta
select * from tb
go

--删除测试
drop table ta,tb
drop view v_ta_tb

/*--测试结果

关联字段        字段1        
----------- ---------- 
1           XX
2           XX

(所影响的行数为 2 行)

关联字段        字段2        
----------- ---------- 
1           YY
2           YY

(所影响的行数为 2 行)
--*/

#5


--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2


--下面是示例

--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'

create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go

--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go

--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段

--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go

--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go

--显示更新结果
select * from ta
select * from tb
go

--删除测试
drop table ta,tb
drop view v_ta_tb

/*--测试结果

关联字段        字段1        
----------- ---------- 
1           XX
2           XX

(所影响的行数为 2 行)

关联字段        字段2        
----------- ---------- 
1           YY
2           YY

(所影响的行数为 2 行)
--*/

#6


多谢各位,已经搞定.分开写吧,不想专牛角尖了

#7


update table set col=condision


update后接的就是要更新的表但只能更新一个表?

但要想实现你要的功能,建议写在触发器里。

#8


直接用触发器不就行了吗?

#9


用触发器也可以呀

#10


接分

#1


不行吧,只能分两次更新,

如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表

#2


--SQL不支持这种更新

--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段

update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段

#3



这样算不算一条语句?

str="update a set col1=xxx from a join b on a.col0=b.col0 update b set col2=yyy from a join b on a.col0=b.col0"

conn.execute str

#4


--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2


--下面是示例

--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'

create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go

--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go

--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段

--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go

--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go

--显示更新结果
select * from ta
select * from tb
go

--删除测试
drop table ta,tb
drop view v_ta_tb

/*--测试结果

关联字段        字段1        
----------- ---------- 
1           XX
2           XX

(所影响的行数为 2 行)

关联字段        字段2        
----------- ---------- 
1           YY
2           YY

(所影响的行数为 2 行)
--*/

#5


--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2


--下面是示例

--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'

create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go

--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go

--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段

--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go

--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go

--显示更新结果
select * from ta
select * from tb
go

--删除测试
drop table ta,tb
drop view v_ta_tb

/*--测试结果

关联字段        字段1        
----------- ---------- 
1           XX
2           XX

(所影响的行数为 2 行)

关联字段        字段2        
----------- ---------- 
1           YY
2           YY

(所影响的行数为 2 行)
--*/

#6


多谢各位,已经搞定.分开写吧,不想专牛角尖了

#7


update table set col=condision


update后接的就是要更新的表但只能更新一个表?

但要想实现你要的功能,建议写在触发器里。

#8


直接用触发器不就行了吗?

#9


用触发器也可以呀

#10


接分