join 更新问题

足球不是方的 2017-04-11 09:50:29


2个表数据如图,做join更新
update a set a.amount=a.amount+b.changeamount
from #a a
inner join #b b on a.mebid=b.mebid

本来结果是
1,1100
2,2100

问题:结果是怎么来的,是只更新第一条还是 都更新了一遍最后更新的第一条数据?麻烦讲解下。
...全文
333 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球不是方的 2017-04-12
  • 打赏
  • 举报
回复
写了个触发器,inserted里面2行数据,是每个mebid的第一条,从结果看是只更新了2条数据,取的都是mebid的第一条。原理就不知道了,在sqlserver下面可以有这种join 的更新,oracle下不行。
xiaoxiangqing 2017-04-11
  • 打赏
  • 举报
回复
这个更新如果有多笔符合条件,是随机的。
Tiger_Zhao 2017-04-11
  • 打赏
  • 举报
回复
每条a记录都只用一条b记录进行更新,至于关联那一条b,属于不可预期部分。
参考
[Quote=SQL Server 2005 联机丛书:]UPDATE (Transact-SQL)
C. 将 UPDATE 语句用于来自其他表的信息
USE AdventureWorks;
GO
UPDATE Sales.SalesPerson
SET SalesYTD = SalesYTD + SubTotal
FROM Sales.SalesPerson AS sp
JOIN Sales.SalesOrderHeader AS so
ON sp.SalesPersonID = so.SalesPersonID
AND so.OrderDate = (SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
WHERE SalesPersonID =
sp.SalesPersonID);
GO


上一个示例假定在特定日期只记录指定销售人员的一笔销售业务,并假定更新信息是最新的。如果在同一天中可以记录指定销售人员的多笔销售业务,所示的示例将不能正常运行。该示例运行时没有错误,但是每个 SalesYTD 值只能用一笔销售数据更新,而不管那一天实际发生了多少笔销售业务。这是因为一条 UPDATE 语句永远不会对同一行更新两次。[/Quote]
卖水果的net 2017-04-11
  • 打赏
  • 举报
回复
楼主把 表 a ,加一个 time 字段,update 也把这个字段加进去,看看哪个时间 问题:结果是怎么来的,是只更新第一条还是 都更新了一遍最后更新的第一条数据?麻烦讲解下。 在表 a 上加个触发器,记录一下,看看记录过程
薛定谔的DBA 2017-04-11
  • 打赏
  • 举报
回复
update a  set a.amount=a.amount+b.changeamount
output deleted.*,inserted.*		--此处输出更新前后的值,可知更改了多少
from #a a
inner join #b b on a.mebid=b.mebid
  • 打赏
  • 举报
回复
貌似 你用select * from b 这个查询 的顺序,后面update时 有多条会用到查询时那种顺序的 第一条

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧