更新每一行与另一行
问题描述:
的一些价值观,我想编写一个更新查询的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
所以基本上:
- 在更新行时,它将尝试查找与当前正在更新的行名称相同的其他行。
- 其中,它将尝试获取具有最高
ID
的行。 - 然后它将更新当前正在更新的行的
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
是唯一的。
答
因此,每一行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
我已经解决了它基于你的样品,谢谢! – hattenn 2013-04-24 13:13:39
很高兴听到... thanx! – TechDo 2013-04-25 06:01:25