2009-08-27 14 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

関連する問題