如果我的子表列具有单个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,否则如果T2中的任何ParentId状态为1,则将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 :(得分: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