1

我有两张桌子,即 PERSON 和 WIFE。我想让 WIFE 的数据在 PERSON 表中可用,同时保持 WIFE 的条目保持不变,同时针对妻子的数据添加一些 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表一样将 WIFE 表的数据复制到 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
   6  Alice       ab city     Y
   7  Rosy        ef town     Y

在给定的示例中,您可能已经注意到妻子的 ADDRESS 与她的配偶相同,并且 IS_MARRIED 列也是如此。而且,PK也不重复。如何解决这个问题?
*已编辑*
另一个重要因素是 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...。如果您更喜欢 Gordon 示例中的 insert 并且您的表很大,那么您可以在 insert 中添加一个 Append 提示...

于 2013-02-11T17:18:52.097 回答
0

试试这个:

insert into Person(Name, Address, Is_Married)
    select w.name, p.address, 'Y'
    from wife w left outer join
         Person p
         on w.Person_id = person.pk
于 2013-02-11T17:17:49.623 回答
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 回答