首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Insert-Select:当两个属性r不相同时从其他表中读取数据(性能)

Insert-Select:当两个属性r不相同时从其他表中读取数据(性能)
EN

Stack Overflow用户
提问于 2010-07-22 15:51:11
回答 2查看 412关注 0票数 1

我有一张这样的桌子:

代码语言:javascript
运行
复制
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相同,那么我可以接受其他属性,但是如果它们不相同,那么我需要从另一个表中读取。

小例子:

代码语言:javascript
运行
复制
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

(还有一些相同的属性)

完成此操作的最快方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-22 15:59:51

你可以试试这个

代码语言:javascript
运行
复制
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

我还没有测试过这个,但是你可以试试。

票数 2
EN

Stack Overflow用户

发布于 2010-07-22 20:42:27

你最好这样做:

代码语言:javascript
运行
复制
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表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3306766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档