gpt4 book ai didi

MySQL 查询基于表更新 mysql 中的列?

转载 作者:可可西里 更新时间:2023-11-01 06:38:36 27 4
gpt4 key购买 nike

假设我有以下表格:

表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,是因为 Jordan、Molly 和 Paris 恰好因为上述两个条件而以某种方式联系在一起。 (他们都去了西类牙)和其他国家,即德国被也访问过西类牙的约旦访问过,所以它有相同的 group_num。约翰访问了沙特阿拉伯,约翰也访问了西类牙,因此它具有相同的 group_num。

是否有一些 SQL 查询或查询(可能涉及也可能不涉及创建其他“补充”表以获得上面显示的所需结果?(即,如果 group_num 应该首先是填充自动递增的值,如“id”,然后在必要时更新。(当前显示为“(空)”的其他值字段可以有非空值

游标/迭代非常慢......以下是我将执行的步骤来填写这些值,使用游标的过程非常缓慢,如果我能摆脱它那就太好了:

  1. 对于表 A,我们看到乔丹在 5 岁时访问了德国。(表 B 中 [5,Germany] 的 Group_Num 更新为 1)。
  2. 乔丹在 6 岁时访问了西类牙。([6,Spain] 的组编号更新为 1,以显示其与乔丹访问西类牙的同一个人相同的分组)
  3. Molly 在 6 岁时访问了西类牙([6,Spain] 的 group_num 更新为 1,因为尽管是不同的人,但相同的年龄/国家/地区组合被击中)
  4. Paris 在 7 岁时访问了法国(tableB 中的 group_num 更新为 2,因为她是另一个人,访问了一个完全不同的国家,无论年龄大小。
  5. John 在 7 岁时访问了沙特阿拉伯(表 B 中 [7,Saudi Arabia] 的 group_num 更新为 3 年龄+国家对)
  6. John 在 5 岁时访问了沙特阿拉伯(表 B 中 [5,Saudi Arabia] 的 group_num 更新为 3,因为它仍然是 John)
  7. John 在 6 岁时访问了西类牙([6,Spain] 的 group_num 已经是 1.. Jordan 之前访问过那里,可能会有一些分组...所以 group_num 代表 John 访问过的所有地方 [6, Spain],[ 5, Saudi Arabia], [7,Saudi Arabia] 全部更新为1

最佳答案

您将需要一种基于添加到 Table1 的每个新项目的迭代方法,如果您对每个这样的项目执行以下语句,它将快速高效:

这里是 SQLFiddle在表 1 中插入最后一条记录之前的数据库状态。

顺便说一句:你的例子与你的描述不完全一致,我假设你错误地将法国 7 签为第 1 组,因为巴黎与第 1 组中的任何人都没有关系。

注意我正在执行的选择:

  1. 第一个搜索我之前访问过的组号(这是我的不相交组,例如组号 3)。
  2. 第二个是搜索是否存在与插入的记录可能相关的不相交组,方法是搜索西类牙和 6 岁的组 num。

在发现你有两个不相交的集合由于新插入的记录而加入后,你可以将之前分配为第二个组号的所有组号更新到第一个组号,这样:

UPDATE Table2 set group_num = 1 where group_num = 3

所以我没有使用任何游标,但此更新是针对表 1 的每次插入。

关于MySQL 查询基于表更新 mysql 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14764543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com