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