0

我想更新我的父表列,如果我的子表列具有單個ParentId的所有相同的值。如何基於子表中的多個值更新單個父表

T1 - 家長

|  ParentId  | StatusId  | 
|---------------------|------------------| 
|   1   |  1   | 
|---------------------|------------------| 
|   2   |  1   | 
|---------------------|------------------| 

T2 - 兒童

|  ChildId  |  ParentId  | StatusId  | 
|---------------------|------------------|------------------| 
|   1   |  1   |  0   | 
|---------------------|------------------|------------------| 
|   2   |  1   |  0   | 
|---------------------|------------------|------------------| 
|   3   |  1   |  0   | 
|---------------------|------------------|------------------| 
|   4   |  2   |  1   | 
|---------------------|------------------|------------------| 
|   5   |  2   |  0   | 
|---------------------|------------------|------------------| 

如果T2狀態列有所有0對的ParentId 1然後設置在T1狀態0,否則,如果有一個1狀態爲T2中的任何ParentId,然後將T1中的狀態設置爲1或者什麼也不做。

更新語句之後

所需的結果:

T1 - 家長

|  ParentId  | StatusId  | 
|---------------------|------------------| 
|   1   |  0   | 
|---------------------|------------------| 
|   2   |  1   | 
|---------------------|------------------| 

T2 - 兒童

|  ChildId  |  ParentId  | StatusId  | 
|---------------------|------------------|------------------| 
|   1   |  1   |  0   | 
|---------------------|------------------|------------------| 
|   2   |  1   |  0   | 
|---------------------|------------------|------------------| 
|   3   |  1   |  0   | 
|---------------------|------------------|------------------| 
|   4   |  2   |  1   | 
|---------------------|------------------|------------------| 
|   5   |  2   |  0   | 
|---------------------|------------------|------------------| 

我知道或許可以使用更新做這樣的事情,並也許是一個while循環,但我不太清楚如何構造它。任何幫助表示讚賞。

+0

你嘗試過什麼到目前爲止做些什麼呢? – Eric

+0

UPDATE PT SET PT.StatusId = CASE WHEN PT.StatusId = 1 THEN 1 WHEN CT.StatusId IN(0,1)THEN 1 END FROM ParentTable PT JOIN ChildTable CT ON PT.ParentID = CT.ParentId – CursiosAsEver69

+0

作爲一般規則,儘量避免while循環。 –

回答

1

這可以使用Update From Select

Update T1 
    Set StatusID = newStatusID 
From 
(
    Select ParentID as changedParentID 
     , max(StatusID) as newStatusID 
    From T2 
    Group By ParentID 
)x 
Where T1.ParentID = x.changedParentID 
And T1.StatusID <> x.newStatusID 
+0

這是一個非常簡單但很好的解決方案。有時候問題的答案可能會很小,但是當你不需要的時候,你會發現你的時間尋找更難的解決方案。 – CursiosAsEver69

相關問題