我有两张桌子,即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表,因此,我当然不想复制她的条目。
答案 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