2013-04-24 70 views
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中做類似的方法?

回答

2

請嘗試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

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

怎麼樣?:

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