两张表 wb_app 和 group ,wb_app是 group 与 app 关联表
create table wb_app
(
id char(32) not null
primary key,
org_id char(32) not null,
group_id char(32) not null ,
app_id char(32) not null
)
create table group
(
id char(32) not null
primary key,
org_id char(32) not null ,
group_name varchar(20) not null,
type varchar(20)
)
现wb_app有一批历史关联数据,执行以下语法基于历史group生成一些新的group
insert into wb_group(id, org_id, group_name,type)
select MD5(UUID()), org_id, group_name, '1' from wb_group where type = '0';
问:如何在wb_app中生成一批数据,基于历史的数据,copy一份,将group_id与新生成的group对应
【以下回答由 GPT 生成】
首先,我们可以使用INSERT INTO ... SELECT
语句来将历史数据复制到wb_app
表中,并在此过程中生成新的group_id
。
INSERT INTO wb_app (id, org_id, group_id, app_id)
SELECT MD5(UUID()), wb_app.org_id, new_group.id, wb_app.app_id
FROM wb_app
JOIN `group` old_group ON wb_app.group_id = old_group.id
JOIN `group` new_group ON old_group.type = '0' AND old_group.org_id = new_group.org_id;
在这个查询中,我们使用JOIN
语句将wb_app
表与group
表关联起来,并通过GROUP
表的条件将旧的group
与新的group
关联起来。通过这种方式,我们可以在复制历史数据的同时为新的wb_app
条目分配新的group_id
。
然后,我们可以使用UPDATE
语句将新生成的group_id
与新生成的group
关联起来。
UPDATE wb_app
JOIN `group` new_group ON wb_app.org_id = new_group.org_id
SET wb_app.group_id = new_group.id
WHERE wb_app.group_id IN (SELECT id FROM `group` WHERE type = '0');
通过将wb_app
表与新生成的group
表关联起来,并使用UPDATE
语句将新的group_id
分配给相应的wb_app
条目,我们可以将新生成的数据与新生成的group
关联起来。
请注意,以上代码只是给出了解决问题的示例,具体的实现可能因数据库引擎和环境设置而有所不同。还请根据实际情况进行调整和测试。