在规范化数据库中的表时传输表数据

时间:2014-01-19 09:09:34

标签: mysql sql database normalization

我有一张这样的桌子:

表1 :(有400条记录)

id    category_title       subcategory
----------------------------------------
1     title1               subTitle1.1
2     title1               subTitle1.2
3     title2               subTitle2.1
4     title2               subTitle2.2
5     title2               subTitle2.3

为了规范化这个表我想创建两个表(Table2,Table3)以及它们之间的关系而不是上面的表。 (删除Table1并创建Table2和Table3),如下所示:

表2:

id   category_title
---------------
1     title1   
2     title2   
3     title3   
4     title4   

表3:

id   subcategory     table2_id(FK)
----------------------------------------
1     title1              1
2     title2              1
3     title3              2
4     title4              1
5     title5              2

我可以将Table1.category_title转移到Table2.category_title以查询此查询:

insert into Table2(category_title) (select distinct category_title from Tabe1)

并可以使用此查询将Table1.subcategory传输到Table3.subcategory:

insert into Table3(subcategory) (select subcategory from Tabe1)

但谁可以在表2中填写具有正确关系的Table3.table2_id(FK)? (如果我想用手做这个,我应该执行至少200个查询,我不想这样做)

任何人都可以给我一个查询或其他方式在这些表之间传输数据? (为我的英文道歉) 提前致谢

2 个答案:

答案 0 :(得分:2)

您可以使用这两个INSERT查询,第二个使用JOIN:

INSERT INTO table2 (category_title)
SELECT DISTINCT category_title FROM table1;

INSERT INTO table3 (subcategory, table2_id)
SELECT DISTINCT subcategory, table2.id
FROM
  table1 INNER JOIN table2 ON table1.category_title=table2.category_title;

请参阅小提琴here

答案 1 :(得分:0)

insert into table3 (subcategory, id) select distinct subcategory, id from table1

不确定subTitle1.1意味着什么,如果每个都不同,你必须在这个字段上放置一些文本解析功能。