利用内联视图进行数据库表合并

日期: 2011-11-14 作者:Dan Clamage翻译:孙瑞 来源:TechTarget中国 英文

问:我有一个表叫做ENTITY,其中包含四个列:srcID、entID、occurrence和histflag。现在我为得到针对每一个entID的‘occurrence’列拥有最大值的行,写了如下的SQL查询语句: select * from ENTITY T1 where T1.srcID  = 2           and   T1.histflag = &#……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:我有一个表叫做ENTITY,其中包含四个列:srcID、entID、occurrence和histflag。现在我为得到针对每一个entID的‘occurrence'列拥有最大值的行,写了如下的SQL查询语句:

select *
from ENTITY T1
where T1.srcID  = 2          
and   T1.histflag = 'N'          
and   T1.occurrence =
      (select max(T2.occurrence)
       from ENTITY T2
       where T2 .srcID =   T1.srcID
       and    T2 .entID =   T1.ent_id);

  这个查询语句没有问题,得到了我想要的结果,然后我想要把所有这些行整合到ACCOUNT表中,以便获得额外的数据。我的select语句是这么写的:

select *
from ENTITY T1, ACCOUNT T3
where T1.srcID  = 2          
and   T1.histflag = 'N'          
and   T1.occurrence =
      (select max(T2.occurrence)
       from ENTITY T2
       where T2 .srcID =   T1.srcID
       and    T2 .entID =   T1.ent_id)
and T1.srcID =   T3.srcID
and T1.entID =   T3.ent_id);

  这回的结果出现问题了,我需要针对很多表进行这一操作,但是这一步骤无法完成的话,整个操作就不能进行下去了,所以请您帮我看一下,指出我的错误出现在哪里,谢谢!

  答:你能做的,就是利用查询来将最新的实体移动到内联视图中。然后这样就能够更加轻松地添加其他表到这个结果集,当然前提是它们之间有正确的关系。

select E.*, A.*
from (
select T1.*
from ENTITY T1
where T1.srcID  = 2          
and   T1.histflag = 'N'          
and   T1.occurrence =
      (select max(T2.occurrence)
       from ENTITY T2
       where T2 .srcID =   T1.srcID
       and    T2 .entID =   T1.entID)) E
INNER JOIN account A
ON A.entID = E.entID;

翻译

孙瑞
孙瑞

相关推荐