【问题标题】:transfer table data when normalize tables in database规范化数据库中的表时传输表数据
【发布时间】:2014-02-08 11:57:12
【问题描述】:

我有一张这样的桌子:

表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

为了规范化此表,我想创建两个表(表 2、表 3)以及它们之间的关系,而不是上表。 (删除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)

但是谁能在 Table2 中用正确的关系填充 Table3.table2_id(FK)? (如果我想手动执行此操作,我应该执行至少 200 个查询,但我不想这样做)

谁能给我一个查询或其他方式在这些表之间传输数据? (为我的英语道歉) 提前致谢

【问题讨论】:

    标签: mysql sql database normalization


    【解决方案1】:

    您可以使用这两个 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

    【讨论】:

      【解决方案2】:
      insert into table3 (subcategory, id) select distinct subcategory, id from table1
      

      不确定subTitle1.1 是什么意思,万一他们每个人都不一样,你必须在这个字段上放一些文本解析功能。

      【讨论】:

        猜你喜欢
        • 2016-06-06
        • 2015-02-15
        • 2023-03-17
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 2011-11-12
        相关资源
        最近更新 更多