我想在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中执行类似操作的方法是什么?
答案 0 :(得分:3)
那么,具有相同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
进一步阅读:
答案 1 :(得分:2)
请尝试INNER 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
是唯一的。
答案 2 :(得分:1)
怎么样?:
UPDATE A
SET A.PARENT_ID = (SELECT MAX(B.ID)
FROM MY_TABLE B
WHERE A.NAME = B.NAME)
FROM MY_TABLE AS A