2012-05-12 38 views
0

でテーブルを更新し、私はこれらの4行は、IDが、私はPERSONID列の更新に苦労しています122 ある1人の人に属しperson_relation反復処理し、SQL

Id | ParentId | ChildId | PersonId  
------------------------------------------- 
1 | null  | 2  | null  
------------------------------------------- 
2 |  1  | 3  | null  
------------------------------------------- 
3 |  2  | 4  | 122 
------------------------------------------- 
4 |  3  | null  | 122 
------------------------------------------- 

という名前のテーブルを持っています。最初の2行はPersonIdとして122を持つ必要があります。


Id | ParentId | ChildId | PersonId  
------------------------------------------- 
1 | null  | 2  | null  
------------------------------------------- 
2 |  1  | 3  | null  
------------------------------------------- 
3 |  2  | 4  | 122 
------------------------------------------- 
4 |  3  | null  | 122 
------------------------------------------- 
5 | null  | 6  | 123 
------------------------------------------- 
6 |  5  | 7  | null  
------------------------------------------- 
7 |  6  | 8  | 123 
------------------------------------------- 
8 |  7  | null  | null 
------------------------------------------- 

今の表は、そのIDS 122と123であり、それはそれで多くの人を持っていることが二人を持っています。 上記の返信はうまくいきません。したがって、これらの行を更新するための反復メソッドが必要です。

+0

"should have?"なぜそれがないのですか? – nawfal

答えて

1
update person_relation 
set personid = 122 
where personid is null 
+1

サンプルデータに作用します。私はそれが実際のデータに存在するすべてのシナリオを網羅していない可能性があると考えています。 ChildID(おそらくPersonIDのnullではない)のNULLを持つ行から始まるすべての行がすべて同じPersonIDを持つことを保証する、ボトムアップの階層検索が必要です。あるいは、リーフノードが正しいと仮定することは想定されていません。多分それは正しいと思われる別のノードです。または、何が正しいのかについて過半数の投票をする必要があるかもしれません。または...一般的に、問題の全範囲は不十分です。 –

0

私はあなたのデータセットがこれらの4つの行に限定されていないことを喜んで賞賛しています。私はもっ​​と安全な何かをするでしょう:

0

そこに関係があるはずです。そのうちの4つが家族に属している場合。次に、その子は親IDの列の値を親のID番号...(この場合は1または2のいずれか)として保持します。私は親のIDはどのようにnullすることができますか彼らは同じ家族の場合は..?

親のIDが適切な場合は、子のpersonIDを正しく更新できます。

+0

この表は厳格なものではありません。私は例のためにそれを言いました。上の表のrow1とrow5はrootです。私はpersonidを更新する方法をもっと心配しています。 – pinkb

+0

少なくとも1人の子供が必ずpersonId値を入力しますか? – Jeevi