SQL从同一个表更新父ID

SQL从同一个表更新父ID,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,是否可以使用“来自查询的更新”更新自引用父id 我有桌子 行政协调会 吸积 AccNumber MasterAcc Name A001 A001 A A002 B A003 A002 C A004 A005 D A005 A009 E 连接的方式是使用AccNumb

是否可以使用“来自查询的更新”更新自引用父id

我有桌子

行政协调会

吸积

AccNumber       MasterAcc    Name
A001             A001         A
A002                          B 
A003             A002         C
A004             A005         D 
A005             A009         E
连接的方式是使用AccNumber,然后需要根据该Acc的MasterAcc更新ParentAccID中的AccID。仅适用于现有AccNumber,并且如果AccNumber和MasterAcc不相同(如果太大,请抱歉)

结果表应该如下所示

行政协调会

谢谢你试试这个

DECLARE @Acc Table (AccID varchar(10),Name  varchar(200),ParentAccID  varchar(200), AccNumber varchar(200))
Insert into @Acc Values 
('01','A',Null,'A001'),
('02','B',Null,'A002'),   
('03','C',Null,'A003'),
('04','D',Null,'A004'),
('05','E',Null,'A005')

DECLARE @AccRef Table (AccNumber varchar(10),MasterAcc varchar(200),Name  varchar(200))
Insert into @AccRef Values 
('A001','A001','A'),
('A002',Null,'B'), 
('A003','A002','C'),
('A004','A005','D'), 
('A005','A009','E')

Update A set ParentAccID = M.AccID From @Acc A
Inner Join @AccRef R on R.AccNumber = A.AccNumber and R.AccNumber <> R.MasterAcc
Inner Join @Acc M on M.AccNumber = R.MasterAcc 
试试这个

DECLARE @Acc Table (AccID varchar(10),Name  varchar(200),ParentAccID  varchar(200), AccNumber varchar(200))
Insert into @Acc Values 
('01','A',Null,'A001'),
('02','B',Null,'A002'),   
('03','C',Null,'A003'),
('04','D',Null,'A004'),
('05','E',Null,'A005')

DECLARE @AccRef Table (AccNumber varchar(10),MasterAcc varchar(200),Name  varchar(200))
Insert into @AccRef Values 
('A001','A001','A'),
('A002',Null,'B'), 
('A003','A002','C'),
('A004','A005','D'), 
('A005','A009','E')

Update A set ParentAccID = M.AccID From @Acc A
Inner Join @AccRef R on R.AccNumber = A.AccNumber and R.AccNumber <> R.MasterAcc
Inner Join @Acc M on M.AccNumber = R.MasterAcc 

为什么AccID=05的ParentAccID在预期结果中为空?AccID=05来自AccNumber A005,其MasterAcc='A009'在Acc表中不存在(如果您在AccNumber上加入)为什么AccID=05的ParentAccID在预期结果中为空?AccID=05来自AccNumber A005,它的MasterAcc='A009'在Acc表中不存在(如果您在AccNumber上加入),这正是我想要的。谢谢这正是我想要的。谢谢
DECLARE @Acc Table (AccID varchar(10),Name  varchar(200),ParentAccID  varchar(200), AccNumber varchar(200))
Insert into @Acc Values 
('01','A',Null,'A001'),
('02','B',Null,'A002'),   
('03','C',Null,'A003'),
('04','D',Null,'A004'),
('05','E',Null,'A005')

DECLARE @AccRef Table (AccNumber varchar(10),MasterAcc varchar(200),Name  varchar(200))
Insert into @AccRef Values 
('A001','A001','A'),
('A002',Null,'B'), 
('A003','A002','C'),
('A004','A005','D'), 
('A005','A009','E')

Update A set ParentAccID = M.AccID From @Acc A
Inner Join @AccRef R on R.AccNumber = A.AccNumber and R.AccNumber <> R.MasterAcc
Inner Join @Acc M on M.AccNumber = R.MasterAcc 
Select * from @Acc