1

3 つのテーブルとしてリファクタリングしたい、繰り返しデータがたくさんあるテーブルがあります。

現在の構造は次のようになります。

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

しかし、もちろんそれはうまくいきません。データを正規化する簡単な方法はありますか?

4

1 に答える 1

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
于 2009-08-27T14:49:21.680 に答える