MySQL 查询将实体迁移到新 table
MySQL query for migrating entities into a new table
在我们的数据库中,我们有几个 table 实体有时会附加一个文件,因此它们有一个 file
列存储磁盘上该文件的名称。
id entity_name file
123 document1 fdjie.txt (from table documents)
456 employee1 null (from table employees)
789 building1 sgrfe.txt (from table buildings)
我创建了一个名为 files
的新 table,我需要将所有填充了 file
列的实体“复制”到其中。最终我将从所有原始 table 中删除 file
列。
files
table 还必须有一个 rel_id
列和一个 table_name
作为它来自的 table。
id table_name rel_id entity_name file
234 documents 123 document1 fdjie.txt
235 buildings 789 building1 sgrfe.txt
因为'employee1'没有文件,当然不会插入那个文件。
我该怎么做?我尝试了带有子选择的插入语句,但我意识到我需要类似循环的东西。我可以在 MySQL 中执行此操作吗?
我不确定你为什么需要循环,除非你有大量的源表。
这样的东西能满足您的需求吗:
insert into files (table_name, rel_id, entity_name, file)
select * from (
select 'documents', id, entity_name, file from `documents` where file is not null
union all
select 'employees', id, entity_name, file from `employees` where file is not null
union all
select 'buildings', id, entity_name, file from `buildings` where file is not null
) as a ;
在我们的数据库中,我们有几个 table 实体有时会附加一个文件,因此它们有一个 file
列存储磁盘上该文件的名称。
id entity_name file
123 document1 fdjie.txt (from table documents)
456 employee1 null (from table employees)
789 building1 sgrfe.txt (from table buildings)
我创建了一个名为 files
的新 table,我需要将所有填充了 file
列的实体“复制”到其中。最终我将从所有原始 table 中删除 file
列。
files
table 还必须有一个 rel_id
列和一个 table_name
作为它来自的 table。
id table_name rel_id entity_name file
234 documents 123 document1 fdjie.txt
235 buildings 789 building1 sgrfe.txt
因为'employee1'没有文件,当然不会插入那个文件。
我该怎么做?我尝试了带有子选择的插入语句,但我意识到我需要类似循环的东西。我可以在 MySQL 中执行此操作吗?
我不确定你为什么需要循环,除非你有大量的源表。
这样的东西能满足您的需求吗:
insert into files (table_name, rel_id, entity_name, file)
select * from (
select 'documents', id, entity_name, file from `documents` where file is not null
union all
select 'employees', id, entity_name, file from `employees` where file is not null
union all
select 'buildings', id, entity_name, file from `buildings` where file is not null
) as a ;