gpt4 book ai didi

MySQL 根据另一个表的结果批量更新新表

转载 作者:行者123 更新时间:2023-11-29 06:28:07 24 4
gpt4 key购买 nike

我有一个相当复杂的数据库结构,有超过 100 万条记录。我正在尝试将数据从现有实体迁移到新实体。

旧数据表(我正在迁移)的结构如下所示:

MAIN / EXISTING TABLE

|-------|-----------|-----------|
| title | text | parent_id |
|-------------------|-----------|
| HELLO | Something | 3001 |
|-------|-----------|-----------|
| HELLO | Hi! | 3002 |
|-------|-----------|-----------|
| TEST | World! | 3001 |
|-------|-----------|-----------|

它有超过 100 万条记录。

作为迁移目标的新表将现有表中的标题属性作为列名称。

NEW TABLE

|---|-----------|-------|------|-------|
|id | parent_id | HELLO | TEST | OTHER |
|---|-----------|-------|------|-------|
| x | 3001 | NULL | NULL | NULL |
|---|-----------|-------|------|-------|
| y | 3002 | NULL | NULL | NULL |
|---|-----------|-------|------|-------|
| z | 3003 | NULL | NULL | NULL |
|---|-----------|-------|------|-------|

基于现有数据的新表的预期结果如下:

DESIRED NEW TABLE

|---|-----------|-----------|--------|-------|
|id | parent_id | HELLO | TEST | OTHER |
|---|-----------|-----------|--------|-------|
| x | 3001 | Something | World! | NULL |
|---|-----------|-----------|--------|-------|
| y | 3002 | Hi! | NULL | NULL |
|---|-----------|-----------|--------|-------|
| z | 3003 | NULL | NULL | NULL |
|---|-----------|-----------|--------|-------|

结果可以通过编程方式实现,如下所示(伪代码):

FOREACH row IN `MAIN TABLE`:
UPDATE `NEW TABLE` SET `row.title` = 'row.text'

但这不是一个可行的解决方案,因为有太多记录需要循环。

有谁知道该解决方案是否可以在 MySQL 中实现?

最佳答案

您可以尝试以下 -

    UPDATE NEWTABLE INNER JOIN
(
select max(case when title='HELLO' then text end) as hello,
max(case when title='TEST' then text end) as test,
max(case when title not in ('HELLO','TEST') then text end) as other
from MAINTABLE group by parent_id
)A ON NEWTABLE.parent_id= A.parent_id
SET HELLO= A.hello,TEST=A.test,OTHER= A.other

关于MySQL 根据另一个表的结果批量更新新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58323417/

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