更新每一行与另一行

更新每一行与另一行

问题描述:

的一些价值观,我想编写一个更新查询的SQL如下所示:更新每一行与另一行

UPDATE A 
SET A.PARENT_ID = [ID of another row] 
FROM MY_TABLE AS A 

我想要做的是,对于每一行,此更新将被应用,我希望它从下面这样的查询计算部分[ID of another row]

SELECT A.NAME, B.NAME, MAX(B.ID) 
FROM MY_TABLE A, MY_TABLE B 
WHERE A.NAME = B.NAME 

所以基本上:

  1. 在更新行时,它将尝试查找与当前正在更新的行名称相同的其他行。
  2. 其中,它将尝试获取具有最高ID的行。
  3. 然后它将更新当前正在更新的行的PARENT_ID值到它找到的行的ID值。

什么是在SQL Server 2008中做类似的方法?

请尝试INNE R JOIN UPDATE:

UPDATE A 
SET A.PARENT_ID = B.mx 
FROM MY_TABLE A 
INNER JOIN (SELECT C.PARENT_ID mx, MAX(C.ID) OVER (PARTITION BY C.NAME) 
      FROM MY_TABLE C 
)B 
ON A.PARENT_ID=B.PARENT_ID 

提供PARENT_ID是唯一的。

+0

我已经解决了它基于你的样品,谢谢! – hattenn 2013-04-24 13:13:39

+0

很高兴听到... thanx! – TechDo 2013-04-25 06:01:25

因此,每一行Name应该有相同的ParentID,并且这应该是该名称的最高分配ID值?

这应该这样做:

;with Highest as (
    select ID,Name,ParentID,MAX(ID) OVER (PARTITION BY Name) as NewParentID 
    from MY_TABLE 
) 
update Highest set ParentID = NewParentID 

延伸阅读:

怎么样?:

UPDATE A 
SET A.PARENT_ID = (SELECT MAX(B.ID) 
      FROM MY_TABLE B 
      WHERE A.NAME = B.NAME) 
FROM MY_TABLE AS A