oracle用一张表的字段更新另一张表的字段

时间:2021-09-06 14:50:34
例如:
表A
name syncid
曲柳川 UUID:6cf1f800-6c86-11e1-9a08-001f290c49e7
曲柳川 UUID:6cf1f800-6c86-11e1-9a08-001f290c49e7
热电厂 UUID:6d0cabf0-6c86-11e1-9a08-001f290c49e7
热电厂 UUID:6d0cabf0-6c86-11e1-9a08-001f290c49e7
热电厂 UUID:6d0cabf0-6c86-11e1-9a08-001f290c49e7
泡鹿沟 UUID:6cec79c0-6c86-11e1-9a08-001f290c49e7
泡沿 UUID:6ce88220-6c86-11e1-9a08-001f290c49e7
泡沿 UUID:6ce88220-6c86-11e1-9a08-001f290c49e7
泡沿 UUID:6ce88220-6c86-11e1-9a08-001f290c49e7
泡沿 UUID:6ce88220-6c86-11e1-9a08-001f290c49e7
泡沿 UUID:6ce88220-6c86-11e1-9a08-001f290c49e7
泡沿1 UUID:6ceacc10-6c86-11e1-9a08-001f290c49e7
泡沿1 UUID:6ceacc10-6c86-11e1-9a08-001f290c49e7
人民大药房(彩北店) UUID:6cb53d20-6c86-11e1-9a08-001f290c49e7
人民大药堂 UUID:6d16be10-6c86-11e1-9a08-001f290c49e7
批发市场工商所 UUID:6cbf7650-6c86-11e1-9a08-001f290c49e7

表B

name syncid
曲柳川 1
热电厂 2
泡鹿沟 3
泡沿 4
泡沿1 5
人民大药房(彩北店) 6
批发市场工商所 7


把表B的syncid 更新成表A的syncid

11 个解决方案

#1


UPDATE use_wx SET 
    uxz=B.dm
FROM xzlx AS B
WHERE use_wx.uxz=B.xz

我看server数据库他们都是这么写的,但oracle  咋写啊!

#2


为了防止A表同一个name有多个syncid,加了一个rownum=1的条件。

update 表B set syncid=(select distinct syncid from 表A where name=表B.name and rownum=1);

#3


一个name就一个唯一的syncid  
引用 2 楼 xiaodejun5241 的回复:
为了防止A表同一个name有多个syncid,加了一个rownum=1的条件。

update 表B set syncid=(select distinct syncid from 表A where name=表B.name and rownum=1);

#4


如果不用rownum=1提示single-row subquery returns more than one row
用rownum=1的话,表B的数据都被刷新成,同一个syncid了。就是rownum=1的时候查询出来的那个ID值

引用 3 楼  的回复:
一个name就一个唯一的syncid  引用 2 楼 xiaodejun5241 的回复:

为了防止A表同一个name有多个syncid,加了一个rownum=1的条件。

update 表B set syncid=(select distinct syncid from 表A where name=表B.name and rownum=1);

#5


update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)

#6


引用 5 楼  的回复:
update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)


Agree with 5#!

#7


引用 5 楼  的回复:
update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)

up,后面要加上update条件

#8


有那么复杂吗,用一个子查询,直接下面的语句不就好了:update B set syncid=(select distinct(syncid) from A where A.name=B.name);

#9



MERGE INTO B  
USING A  
ON (A.NAME=B.NAME)    
WHEN MATCHED THEN   
UPDATE SET   
B.syncid =A.syncid    


可以常使用用merge,可以提高性能,不需要用exist

#10


引用 9 楼  的回复:
SQL code

MERGE INTO B  
USING A  
ON (A.NAME=B.NAME)    
WHEN MATCHED THEN   
UPDATE SET   
B.syncid =A.syncid    

可以 常使用用merge,可以提高性能,不需要用exist


可以 尝试用用merge,可以提高性能,不需要用exist

#11


引用 5 楼 jiaofagang 的回复:
update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)




此方法是可行. oracle用一张表的字段更新另一张表的字段
但就是不知是什么原理,求5楼解答下。

#1


UPDATE use_wx SET 
    uxz=B.dm
FROM xzlx AS B
WHERE use_wx.uxz=B.xz

我看server数据库他们都是这么写的,但oracle  咋写啊!

#2


为了防止A表同一个name有多个syncid,加了一个rownum=1的条件。

update 表B set syncid=(select distinct syncid from 表A where name=表B.name and rownum=1);

#3


一个name就一个唯一的syncid  
引用 2 楼 xiaodejun5241 的回复:
为了防止A表同一个name有多个syncid,加了一个rownum=1的条件。

update 表B set syncid=(select distinct syncid from 表A where name=表B.name and rownum=1);

#4


如果不用rownum=1提示single-row subquery returns more than one row
用rownum=1的话,表B的数据都被刷新成,同一个syncid了。就是rownum=1的时候查询出来的那个ID值

引用 3 楼  的回复:
一个name就一个唯一的syncid  引用 2 楼 xiaodejun5241 的回复:

为了防止A表同一个name有多个syncid,加了一个rownum=1的条件。

update 表B set syncid=(select distinct syncid from 表A where name=表B.name and rownum=1);

#5


update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)

#6


引用 5 楼  的回复:
update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)


Agree with 5#!

#7


引用 5 楼  的回复:
update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)

up,后面要加上update条件

#8


有那么复杂吗,用一个子查询,直接下面的语句不就好了:update B set syncid=(select distinct(syncid) from A where A.name=B.name);

#9



MERGE INTO B  
USING A  
ON (A.NAME=B.NAME)    
WHEN MATCHED THEN   
UPDATE SET   
B.syncid =A.syncid    


可以常使用用merge,可以提高性能,不需要用exist

#10


引用 9 楼  的回复:
SQL code

MERGE INTO B  
USING A  
ON (A.NAME=B.NAME)    
WHEN MATCHED THEN   
UPDATE SET   
B.syncid =A.syncid    

可以 常使用用merge,可以提高性能,不需要用exist


可以 尝试用用merge,可以提高性能,不需要用exist

#11


引用 5 楼 jiaofagang 的回复:
update 表B set syncid=(select distinct syncid from 表A where name=表B.name)
  where exits (select 1 from 表A where name=表B.name)




此方法是可行. oracle用一张表的字段更新另一张表的字段
但就是不知是什么原理,求5楼解答下。