两个结构完全相同的表,如果有某字段相同的话,两个表都更新这个字段,请问这个如何实现?
例如,表A和表B结构相同,都只有两个字段,name,age单个表中的name是不可相同的但是A,B中都有name为zhangsan的字段,我想将这两个字段分别更新为A_z...
例如,表A和表B结构相同,都只有两个字段,name,age
单个表中的name是不可相同的
但是A,B中都有name为zhangsan的字段,我想将这两个字段分别更新为A_zhangsan,B_zhangsan,请问该如何做?
主要的问题是如何同时更新两张表的数据的问题,高手麻烦解答下啊
补充:
比如表A:
zhangsan 18
lisi 20
wangwu 21
表B:
zhaoliu 17
zhangsan 15
wangmazi 22
这种结构的,我想查询到两个表都有zhangsan存在时,分别更新为A_zhangsan,B_zhangsan
数据库是mysql 展开
单个表中的name是不可相同的
但是A,B中都有name为zhangsan的字段,我想将这两个字段分别更新为A_zhangsan,B_zhangsan,请问该如何做?
主要的问题是如何同时更新两张表的数据的问题,高手麻烦解答下啊
补充:
比如表A:
zhangsan 18
lisi 20
wangwu 21
表B:
zhaoliu 17
zhangsan 15
wangmazi 22
这种结构的,我想查询到两个表都有zhangsan存在时,分别更新为A_zhangsan,B_zhangsan
数据库是mysql 展开
4个回答
展开全部
一般是采用临时表,触发器更新,函数运算 这些方式
临时表消耗IO,触发器可能环节不统一,函数运算就是更新后的字段还原叠加(A_zhangsan 去掉前缀级联,虽然不用临时表,但是也有一定的风险)
举一个临时表的例子:使用@A,@B 临时表变量模拟你的两个表,@T模拟临时表
使用事务更新
declare @A table (name varchar(30),age int)
declare @B table (name varchar(30),age int)
declare @T table (name varchar(30))
insert into @A
select 'zhangsan','54' union all
select '郑和','54' union all
select '曹操','54' union all
select '关羽','46'
insert into @B
select 'zhangsan','54' union all
select '郑和','54' union all
select '曹操','54' union all
select '关羽','46'
insert into @T
select A.name
from @A A inner join @B B on(A.name=B.name)
begin tran
--
if exists(select null from @T)
begin
update A
set A.name='A_'+A.name
from @A A inner join @T T on(A.name=T.name)
update B
set B.name='B_'+B.name
from @B B inner join @T T on(B.name=T.name)
end
--
if @@trancount>0 commit tran
select * from @A
select * from @B
追问
感谢!我想问下有更简单的方法吗?我只是想update A之后仍然能找到那条B中的数据,这样才能update B,可以通过查找其他字段的索引来更新吗?其实实际表中是有一个不重复的id字段的。我的数据库是mysql
展开全部
一般是采用临时表,触发器更新,函数运算 这些方式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
UPDATE A SET name = 'A_' + name WHERE name in (SELECT name FROM B);
UPDATE B SET name = 'B_' + name WHERE name in (SELECT name FROM A);
UPDATE B SET name = 'B_' + name WHERE name in (SELECT name FROM A);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将2个update放到一个事务里面执行.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询