1

PERSON と WIFE という 2 つのテーブルがあります。WIFE のエントリを維持しながら、WIFE のデータを PERSON テーブルで利用できるようにすると同時に、妻のデータに対して PERSON の値をいくつか追加したいと考えています。

PERSON テーブル

    PK   NAME      ADDRESS    IS_MARRIED
    1  John        ab city     Y        
    2  Varvatos    cd town     N
    3  Smith       ef town     Y
    4  Henry       gh city     Y
    5  Lynda       gh city     Y

ワイフテーブル

    PK  PERSON_ID (FK)    NAME         
    1    1                 Alice
    2    3                 Rosy
    3    4                 Lynda

今私はこの
PERSONテーブルのようなPERSONテーブルにWIFEテーブルのデータをコピーしたい

   PK   NAME      ADDRESS    IS_MARRIED
   1  John        ab city     Y        
   2  Varvatos    cd town     N
   3  Smith       ef town     Y
   4  Henry       gh city     Y
   5  Lynda       gh city     Y
   6  Alice       ab city     Y
   7  Rosy        ef town     Y

上記の例のように、妻の ADDRESS が配偶者の ADDRESS と同じであり、IS_MARRIED 列も同じであることに気付いたかもしれません。また、PK も複製されません。これについてどうすればいいですか?
*編集済み*
もう 1 つの重要な要素は、Lynda が既に PERSON テーブルに存在することです。したがって、彼女のエントリを重複させたくありません。

4

4 に答える 4

2
declare
newId number;
begin
select nvl(max(person.pk),0) + 1 into newId from person;
for x in (
    select w.Name, p.Address
    from wife w inner join Person p
    on w.Person_id = P.pk) loop
   insert into Person(pk, Name,Address,Is_Married) values (newId ,x.Name ,x.Address,'Y');
   newId := newId  +1;
end loop;
commit;
end
于 2013-02-11T21:03:36.883 に答える
1

CTAS-create table table_name を使用して、両方のテーブルから必要なものを選択します。結合を記述し、select キーワードの上に create table as... を追加するだけです。ゴードンの例のように挿入を好み、テーブルが大きい場合は、挿入に追加ヒントを追加できます...

于 2013-02-11T17:18:52.097 に答える
0

こんにちは、以下のコードを試してください: これはあなたの要件を満たしています

declare PKId number;
begin
  select nvl(max(person.pk),0) + 1 into PKId 
  from person;

  for x in (select w.Name, p.Address
            from wife w 
            inner join Person p on w.Person_id = P.pk
           ) loop

     insert into Person(pk, Name,Address,Is_Married) 
     values (PKId ,x.Name ,x.Address,'Y');

     PKId := PKId  +1;
  end loop;
  commit;
end
于 2013-02-12T03:59:55.900 に答える