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 ;