gpt4 book ai didi

sql - 自加入具有传递数据的更新查询

转载 作者:行者123 更新时间:2023-12-01 04:59:15 24 4
gpt4 key购买 nike

我有员工和他的同事数据的下表,如果有与其他员工匹配的同事,我想更新员工表中的bucketid。

在这个例子中,

Employee = 101 与 Employee = 103 同事(即 c1)匹配,所以两者都应该有相同的 bucketid = 1(即两个 bucketid 的最小值)

并且 Employee = 102 与 Employee = 103 同事(即 c3)匹配,因此两者都应该具有相同的 bucketid,但这里应该更新为 1,因为 employee=102 bucketid 刚刚更改为 1。我们在此有传递律相关数据例子。

(i.e. a=b and b=c then a=c)

员工表:
EmployeeID  EmployeeName    BucketID
101 williams 1
102 williams 2
103 williams 3
104 williams 4

Employee_Colleague 表:
EmployeeID  Colleague
101 c1
101 c2
102 c3
102 c4
103 c1
103 c3
104 c7

我尝试使用此更新查询,
 update a2
set BucketID = a1.BucketID
from Employee a1
inner join Emp_Colleagues c1 on a1.EmployeeID=c1.EmployeeID
inner join Employee a2 on a1.EmployeeName=a2.EmployeeName
inner join Emp_Colleagues c2 on a2.EmployeeID=c2.EmployeeID
where c1.Colleague=c2.Colleague and a1.BucketID <> a2.BucketID

它返回低于输出。
EmployeeID  EmployeeName    BucketID
101 williams 1
102 williams 1
103 williams 3
104 williams 4

但我希望在 Employee 表中输出如下。
EmployeeID  EmployeeName    BucketID
101 williams 1
102 williams 1
103 williams 1
104 williams 4

最佳答案

我不认为你可以在一个更新语句中做到这一点。但是,您可以使用循环来保持更新,直到没有任何可更新的内容为止:

declare @updates int = 1
while @updates > 0
begin
update a2
set BucketID = a1.BucketID
from Employee a1
inner join Emp_Colleagues c1 on a1.EmployeeID=c1.EmployeeID
inner join Emp_Colleagues c2 on c1.Colleague=c2.Colleague
inner join Employee a2 on a2.EmployeeID=c2.EmployeeID
where a1.BucketID < a2.BucketID
set @updates = @@ROWCOUNT
end

关于sql - 自加入具有传递数据的更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34338433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com