0

J'essaie de mettre à jour ma colonne de table parent si la colonne de la table enfant a toutes les mêmes valeurs pour un seul ParentId.Comment mettre à jour une table parent unique basée sur plusieurs valeurs dans la table enfant

T1 - Parent

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

T2 - Enfant

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

Si la colonne d'état T2 a tous les 0 pour ParentId 1 état mis alors en T1 à 0 sinon s'il y a un 1 statut pour tout ParentId dans T2 puis définissez le statut dans T1 à 1 ou ne faites rien.

Résultat souhaité après la déclaration de mise à jour:

T1 - Parent

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

T2 - Enfant

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

Je sais peut-être faire quelque chose comme ceci à l'aide d'une mise à jour et peut-être une boucle de temps mais je ne sais pas trop comment le construire. Toute aide est appréciée.

+0

Qu'avez-vous essayé jusqu'à présent? – Eric

+0

UPDATE PT SET PT.StatusId = CASE QUAND PT.StatusId = 1 THEN 1 QUAND CT.StatusId IN (0,1) THEN 1 FIN DE ParentTable PT JOIN ChildTable CT ON PT.ParentID = CT.ParentId – CursiosAsEver69

+0

En règle générale, essayez d'éviter les boucles. –

Répondre

1

Cela peut être fait en utilisant un 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

Ceci est une solution très simple mais géniale. Parfois, la réponse aux problèmes peut être si petite, mais vous trouvez votre temps à chercher des solutions plus difficiles quand vous n'en avez pas besoin. – CursiosAsEver69