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

相关问题