1

我想用 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 中执行类似操作的方法是什么?

4

3 回答 3

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

进一步阅读:

于 2013-04-24T12:18:04.893 回答
2

请尝试 INNER JOIN 更新:

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是独一无二的。

于 2013-04-24T12:22:20.617 回答
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
于 2013-04-24T12:24:00.387 回答