将一个表转换为两个新表

时间:2012-11-02 11:06:25

标签: mysql sql select export

我正在尝试将数据从一个表移动到两个新表中,但我不确定如何以最好和最简单的方式执行此操作。

我在newsletter_users中有大约2000行,如下所示:

userid company email memberofgroup

其中

memberofgroup 

是一个引用newsletter_mailgroups的整数。如果用户想要成为不同组的成员,这不是最好的方法。然后将有x行与相同的电子邮件。 2000个用户x 3或4个不同的组(我怎么想?)因此我制作了两个新表

newsletter_members看起来像这样

userid email company

和另一个表newsletter_member_of_group看起来像这样:

field_member_uid field_user_id field_memberofgroup

其中

field_user_id

将包含来自newsletter_members和

的用户ID
field_memberofgroup 

将包含电子邮件组ID。 F.X。

field_user_id  field_memberofgroup 
    2                 6
    2                 4
    2                 8
    3                 1
    5                 6

如何以最佳方式导出然后导入它们,以便电子邮件不会在newsletter_members中重复? - 我可能需要进行手动检查,以查看哪些用户是多个邮件组的成员。

Mailgroups表:

1   Forhandlere 
2   Arkitekter og byggerådgivere   
3   Typehusfabrikanter  
4   Byggeentreprenører 
5   Murermestre 
6   Tømrermestre   
7   Tagdækkere 
8   Boligforeninger/Ejendomsselskaber   
9   Bygge-interesserede 
10  Tyske modtagere 
11  Landskabsarkitekter 
12  Norske arkitekter   
13  Svenske arkitekter  
14  Norske forhandlere  
15  Svenske forhandlere 
16  Brancherelaterede   
17  Svenske ansatte 
18  Norske ansatte  
19  Beijer Sverige  

1 个答案:

答案 0 :(得分:1)

解决方案只需几个步骤:

  • Craete newsletter_member_of_group

脚本:

 CREATE TABLE newsletter_member_of_group(
  field_member_uid INT PRIMARY KEY AUTO_INCREMENT,
  field_user_id INT,
  field_memberofgroup INT
);

请注意,field_member_uid是AUTO_INCREMENT,它将帮助我们插入ID值。

  • 将数据从newsletter_users复制newsletter_member_of_group

脚本:

INSERT INTO newsletter_member_of_group
  SELECT NULL, userid, memberofgroup FROM newsletter_users;
  • 创建 newsletter_members表。我们有两种变体:创建新表格和复制数据,或将newsletter_users重命名为newsletter_members并删除memberofgroup字段。我选择第二种变体。

脚本:

ALTER TABLE newsletter_users RENAME TO newsletter_members;
ALTER TABLE newsletter_members DROP COLUMN memberofgroup;