我有一张这样的桌子:
Create Table PersonAgent (
PersonID varchar2(10) not null,
AgentID varchar2(10) not null,
Address varchar2(50),
City varchar2(50),
Country varchar2(50)
)我需要生成这个表,coze有些数据是不正确的。
如果PersonID和AgentID相同,那么我可以接受其他属性,但是如果它们不相同,那么我需要从另一个表中读取。
小例子:
INSERT INTO PersonAgent_copy(PersonID, AgentID, Address, City, Country)
Select Pa.Persid, Pa.Agentid,
(Case
When Pa.Personid = Pa.Agentid
Then pa.Address
ELSE (SELECT p.Address
FROM Person p
Where Pa.Agentid = P.Personid)),
(Case
When Pa.Personid = Pa.Agentid
Then pa.City
ELSE (SELECT p.City
FROM Person p
Where Pa.Agentid = P.Personid)),
(Case
When Pa.Personid = Pa.Agentid
Then pa.Country
ELSE (SELECT p.Country
From Person P
Where Pa.Agentid = P.Personid))
FROM PersonAgent pa(还有一些相同的属性)
完成此操作的最快方法是什么?
发布于 2010-07-22 15:59:51
你可以试试这个
INSERT INTO PersonAgent_copy(PersonID, AgentID, Address, City, Country)
Select Pa.Persid, Pa.Agentid, pa.Address, pa.City, pa.Country
FROM PersonAgent pa
where Pa.Personid = Pa.Agentid
union all
Select Pa.Persid, Pa.Agentid, p.Address, p.City, p.Country
FROM PersonAgent pa, Person p
where Pa.Personid <> Pa.Agentid and Pa.Agentid = P.Personid我还没有测试过这个,但是你可以试试。
发布于 2010-07-22 20:42:27
你最好这样做:
INSERT INTO PersonAgent_copy(PersonID, AgentID, Address, City, Country)
select pa.persid, pa.agentid,
Case
When Pa.Personid = Pa.Agentid
Then pa.Address
ELSE p.Address
END,
Case
When Pa.Personid = Pa.Agentid
Then pa.City
ELSE p.City
END,
Case
When Pa.Personid = Pa.Agentid
Then pa.Country
ELSE p.Country
END
from
PersonAgent pa
left outer join
Person p
on pa.agent_id = p.person_id这样做的原因是,使用您的方法,每次personid和agentid相同时,必须对Person表运行三个查询。这可以非常快地积累起来。使用我的方法,只查询一次Person表。
https://stackoverflow.com/questions/3306766
复制相似问题