假设我有以下表格:
表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
tableB的
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”列获取以下值:
tableB的
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的原因是因为上述两个标准,Jordan,Molly和Paris都碰巧以某种方式联系在一起。 (他们都去了西班牙)和其他国家,即德国也访问了西班牙的乔丹,所以它有相同的group_num。约翰也访问了沙特阿拉伯,他也访问了西班牙,因此它拥有相同的group_num。
是否有一些SQL查询或查询(可能会或可能不会涉及创建其他“补充”表以获得上面显示的所需结果?(即如果group_num应该首先是可以的填充auto_incrementing值,如“id”,如果有必要,稍后更新。(可以为当前显示为“(空)”的其他值字段设置非空值
游标/迭代非常慢......以下是我将执行以填充这些值的步骤,使用游标的过程非常缓慢,如果我可以摆脱它,那就太棒了:
答案 0 :(得分:1)
您将需要一种迭代方法,该方法将基于添加到Table1的每个新项目,如果您为每个此类项目执行以下语句,它将是快速有效的:
在插入表1中的最后一条记录之前,这是db的状态SQLFiddle。
顺便说一句:你的例子与你的描述并不完全一致,我认为你错误地将法国7作为第1组签名,因为巴黎与第1组中的任何人没有关系。
注意我正在执行的选择:
在发现你有两个因新插入记录而加入的不相交集合之后,你可以将先前被指定为第二个组号的所有组号更新为第一个,这样:
UPDATE Table2 set group_num = 1 where group_num = 3
所以我没有使用任何游标,但是这个更新是针对表1的每个插入。
答案 1 :(得分:0)
@ 大马库西你可以看到跳跳器是否可以工作而不是游标。如果只有在数据插入表A时才能动态更新group_num,则触发器比游标更快。