2009-08-27 61 views
1

我有一个包含大量重复数据的表,我想将其重构为3个表。Oracle:在迁移过程中规范化数据

当前结构如下:

meeting_desc 
meeting_date 
topic_desc 
... 

而且在current_table数据的模样:

meeting1,2/3/2009,abc 
meeting1,2/3/2009,efg 
meeting1,2/3/2009,xyz 
meeting2,4/5/2009,aaa 
meeting2,4/5/2009,bbb 

我想创建一个会议桌和一个主题表,其中的PK从未来序列:

MEETING: 
    id 
    meeting_desc 
    meeting_date 

TOPIC: 
    id 
    meeting_id 
    topic_desc 

我无法弄清楚如何将数据插入到新表中。我试过了:

insert into MEETING select distinct 
    seq.nextval, meeting_desc, meeting_date from current_table 

但当然不起作用。有没有简单的方法来标准化数据?

回答

3

DISTINCT放置在一个子查询应该工作:

SQL> INSERT INTO meeting 
    2  SELECT seq.nextval, meeting_desc, meeting_date 
    3  FROM (SELECT DISTINCT meeting_desc, meeting_date 
    4    FROM current_table); 

2 rows inserted 

一旦做到这一点,你会加入这个新创建的表与旧表的生成的ID关联到孩子表:

SQL> INSERT INTO topic 
    2  SELECT m.id, topic_seq.NEXTVAL, ct.topic_desc 
    3   FROM current_table ct 
    4   JOIN meeting m ON (ct.meeting_desc = m.meeting_desc 
    5       AND ct.meeting_date = m.meeting_date); 

5 rows inserted 
+0

完美 - 谢谢。 – chris 2009-08-27 14:52:21