次のテーブルがあるとします。
テーブルA
a_name | age | country
Jordan | 5 | Germany
Jordan | 6 | Spain
Molly | 6 | Spain
Paris | 7 | France
John | 7 | Saudi Arabia
John | 5 | Saudi Arabia
John | 6 | Spain
テーブルB
id (auto increment primary key)
| age | country | group_num (initially null)
1 | 5 | Germany |
2 | 6 | Spain |
3 | 7 | France |
4 | 7 | Spain |
5 | 8 | France |
6 | 9 | France |
7 | 2 | Mexico |
8 | 7 | Saudi Arabia |
9 | 5 | Saudi Arabia |
「group_num」列の次の値を取得できる、ある種の選択/更新を実行できるようにしたい:
テーブルB
id (auto increment primary key)
| age | country | group_num
1 | 5 | Germany | 1
2 | 6 | Spain | 1
3 | 7 | France | 1
4 | 7 | Spain |
5 | 7 | France | 2
6 | 9 | France |
7 | 2 | Mexico |
8 | 7 | Saudi Arabia | 1
9 | 5 | Saudi Arabia | 1
group_num は、次の基準に基づいて割り当てられます。
1) Places person "a_name" went.
2) Whether other people visited that same country. (regardless of age).
ID の 1、2、3、8、9 がすべて同じ groupId を持つ理由は、上記の 2 つの基準により、Jordan、Molly、および Paris が何らかの形でリンクされているためです。(彼らは全員スペインに行きました) と他の国、つまり、ドイツは、同じくスペインを訪れたヨルダンによって訪れられたので、同じ group_num を持ちます。サウジアラビアは、スペインも訪れた John が訪れたので、group_num は同じです。
SQLクエリまたはクエリがありますか(上記の目的の結果を得るために、他の「補完的な」テーブルの作成が必要な場合とそうでない場合がありますか? (つまり、最初にgroup_numに「id」などのauto_incrementing値を入力しても問題ありません。その後、必要に応じて更新されます (現在「(空)」として表示されている他の値フィールドに null 以外の値を指定してもかまいません)。
カーソル/反復は非常に遅いです...これらの値を入力するために実行する手順は次のとおりです。カーソルを使用した非常に遅いプロセスです。これを取り除くことができれば、それは素晴らしいことです:
- tableA では、Jordan が 5 歳でドイツを訪れたことがわかります ([5,Germany] の tableB の Group_Num が 1 に更新されました)。
- Jordan は 6 歳でスペインを訪れます。
- Molly は 6 歳でスペインを訪れます ([6,Spain] の group_num は、別の人であるにもかかわらず、同じ年齢/国のペアがヒットしたため、1 に更新されました)。
- パリは 7 歳のときにフランスを訪れました (テーブル B の group_num は 2 に更新されました。彼女は年齢に関係なく、まったく別の国を訪れた別の人物だからです。
- John は 7 歳でサウジアラビアを訪れます (tableB の [7,Saudi Arabia] の group_num は age+country ペアの 3 に更新されます)
- ジョンは 5 歳でサウジアラビアを訪問します (表 B の [5,サウジアラビア] の group_num は、まだジョンであるため、年齢と国のペアの 3 に更新されます)
- ジョンは 6 歳でスペインを訪れます ([6, スペイン] の group_num は既に 1.. ヨルダンは以前にそこを訪れました。いくつかのグループ化がある可能性があります... したがって、ジョンが訪れたすべての場所の group_num [6, スペイン], [5, サウジアラビア] Arabia]、および [7,Saudi Arabia] はすべて 1 に更新されます