sql server 2008使用update set join on更新表,结果部分数据没更新

时间:2022-08-23 13:23:55
现在有两个表
A表如下:
A _ID  A1  A2 A3
B表如下:
B_ID  A1  B2 A3

使用以下语句
update A 
SET A.A3=B.A3
FROM A INNER JOIN B
ON A.A1=B.A1

然后select * from A
发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。
数据库小白求问。。 

10 个解决方案

#1


发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

#2


如果select 不出来这些行,肯定也更新不了。

#3


不至于吧  你把数据贴上来 看看

#4


引用 2 楼 wmxcn2000 的回复:
如果select 不出来这些行,肯定也更新不了。

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?

#5


引用 1 楼 sinat_28984567 的回复:
发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?

#6


引用 3 楼 baidu_36457652 的回复:
不至于吧  你把数据贴上来 看看

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?

#7


那你用 exists 加子查询的方式 试试

#8


引用 5 楼 m0_37803230 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?


更新的时候和索引也有关系,在查找更新列时如果用索引查找会快;如果更新的字段是索引字段,更新的时候除了更新字段还会更新索引所以会慢

#9


引用 8 楼 sinat_28984567 的回复:
Quote: 引用 5 楼 m0_37803230 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?


更新的时候和索引也有关系,在查找更新列时如果用索引查找会快;如果更新的字段是索引字段,更新的时候除了更新字段还会更新索引所以会慢

嗯。是的。
我现在就是用的两个表数据量都是千万,需要每天都进行更新。
我当前的做法是建立了临时表,临时表不建立索引,进行数据补全后,再一次性插入到基表中。
但是发现因为数据量大,数据补全这个东西耗时很久。
测试的时候,一个表44w,一个表10w,更新就1分钟了
实际使用的时候两个表都上百万千万的。。
想知道有没有什么优化的方法呢?
感谢回复~~

#10


引用 9 楼 m0_37803230 的回复:
嗯。是的。
我现在就是用的两个表数据量都是千万,需要每天都进行更新。
我当前的做法是建立了临时表,临时表不建立索引,进行数据补全后,再一次性插入到基表中。
但是发现因为数据量大,数据补全这个东西耗时很久。
测试的时候,一个表44w,一个表10w,更新就1分钟了
实际使用的时候两个表都上百万千万的。。
想知道有没有什么优化的方法呢?
感谢回复~~


给A、B表的A1字段都加上索引试试

#1


发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

#2


如果select 不出来这些行,肯定也更新不了。

#3


不至于吧  你把数据贴上来 看看

#4


引用 2 楼 wmxcn2000 的回复:
如果select 不出来这些行,肯定也更新不了。

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?

#5


引用 1 楼 sinat_28984567 的回复:
发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?

#6


引用 3 楼 baidu_36457652 的回复:
不至于吧  你把数据贴上来 看看

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?

#7


那你用 exists 加子查询的方式 试试

#8


引用 5 楼 m0_37803230 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?


更新的时候和索引也有关系,在查找更新列时如果用索引查找会快;如果更新的字段是索引字段,更新的时候除了更新字段还会更新索引所以会慢

#9


引用 8 楼 sinat_28984567 的回复:
Quote: 引用 5 楼 m0_37803230 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

发现A 中A3 列很多行,明明能通过B来补充,但是却没补上。

两个表中这样的数据是什么样的?应该补充没有成功的

感谢答复~~昨天已经发现问题了。数据源问题。
但是还有一个问题。因为使用这种方式数据多表联合的方式,当两个表的数据量很大的时候速度特别慢。。
不知道有没有什么方法可以进行优化呢?
或者有什么更好的对表进行补全的方式吗?


更新的时候和索引也有关系,在查找更新列时如果用索引查找会快;如果更新的字段是索引字段,更新的时候除了更新字段还会更新索引所以会慢

嗯。是的。
我现在就是用的两个表数据量都是千万,需要每天都进行更新。
我当前的做法是建立了临时表,临时表不建立索引,进行数据补全后,再一次性插入到基表中。
但是发现因为数据量大,数据补全这个东西耗时很久。
测试的时候,一个表44w,一个表10w,更新就1分钟了
实际使用的时候两个表都上百万千万的。。
想知道有没有什么优化的方法呢?
感谢回复~~

#10


引用 9 楼 m0_37803230 的回复:
嗯。是的。
我现在就是用的两个表数据量都是千万,需要每天都进行更新。
我当前的做法是建立了临时表,临时表不建立索引,进行数据补全后,再一次性插入到基表中。
但是发现因为数据量大,数据补全这个东西耗时很久。
测试的时候,一个表44w,一个表10w,更新就1分钟了
实际使用的时候两个表都上百万千万的。。
想知道有没有什么优化的方法呢?
感谢回复~~


给A、B表的A1字段都加上索引试试