0

子テーブルの列が1つのParentIdに対してすべて同じ値を持つ場合、親テーブルの列を更新しようとしています。子テーブルの複数の値に基づいて1つの親テーブルを更新する方法

T1 - 親

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

T2 - 子供T2の状態列があるならば、それ以外は0にT1でのステータスを設定ParentIdは1のためのすべての0年代を持っている場合

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

1のステータスをT2のParentIdに設定し、T1のステータスを1に設定するか、何もしません。 UPDATE文の後

望ましい結果:

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   | 
|---------------------|------------------|------------------| 

は、おそらくアップデートを使用して、このような何かを行うことができますし、多分ループですが、私はそれをどのように構築するかについてはあまりよく分かりません。どんな助けもありがとうございます。

+0

を使用して行うことができますか? – Eric

+0

UPDATE PT SET PT.StatusId = CASE PT.StatusId = 1 THEN 1 ParentTable PT FROM CT.StatusId IN(0,1)THEN 1 END がPT.ParentID = CT.ParentId ON ChildTable CT をJOIN – 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

関連する問題