将数据从一个表复制到另一个表 - Oracle

时间:2013-02-11 17:16:10

标签: sql oracle plsql

我有两张桌子,即PERSON和WIFE。我想在PERSON表中提供WIFE的数据,同时保持WIFE的条目,同时在妻子的数据中添加一些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

WIFE表

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

现在我想将WIFE表的数据复制到像这样的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
   6  Alice       ab city     Y
   7  Rosy        ef town     Y

如在给定的例子中,您可能已经注意到妻子的地址与她的配偶相同,并且IS_MARRIED列也是如此。而且,PK也没有重复。如何解决这个问题?
* 被修改 *
另一个重要因素是Lynda已经退出PERSON表,因此,我当然不想复制她的条目。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用CTAS-create table table_name从两个表中选择所需的任何内容。只需编写一个连接,并在select关键字上方添加create table作为...如果您喜欢在Gordon的示例中插入并且您的表格很大,那么您可以在插入中添加附加提示...

答案 2 :(得分: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

答案 3 :(得分: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