MySQL查询,用于将实体迁移到新表中



在我们的数据库中,我们有一些表,其中的实体有时会附加一个文件,因此它们有一个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)

我已经创建了一个名为CCD_ 2的新表;复制";已填充CCD_ 3列的所有实体。最后,我将从所有原始表中删除file列。

files表还必须有一个rel_id列和一个用于其来源表的table_name

id      table_name      rel_id      entity_name     file
234     documents       123         document1       fdjie.txt
235     buildings       789         building1       sgrfe.txt

由于"employee1"没有文件,因此当然不会插入该文件。

我该怎么做?我尝试了一个带有subselect的insert语句,但我意识到我需要一个类似循环的东西。我可以在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 ;

相关内容

  • 没有找到相关文章

最新更新