具有两个自联接的SQL查询 - 是否有更好的方法

问题描述 投票:0回答:2

你能帮忙解决这个问题吗?

表结构如下:

产权拥有者

  • 号码(主键)
  • PropertyId(主键)
  • OWNERID

属性

  • PropertyId(主键)
  • LoanId(主键)

现在,如果我有一个LoanId,我怎样才能找到已经获得给定LoanId的属性ownerId的所有属性?

我现在有以下但它看起来很尴尬:

Select po.OwnerId, po.PropertyId
from Property
join PropertyOwner po on po.PropertyId= Property.PropertyId
join PropertyOwner po2 on po2.OwnerId = po.OwnerId 
join Property pp on po2.PropertyId= pp.PropertyId and pp.LoanId = @_givenLoanId

有没有更好的办法?

sql self-join
2个回答
1
投票

存在的想法是对你正在做的事情的更直接的解释:

Select po.OwnerId, po.PropertyId
from PropertyOwner po
where exists (select 1
              from Property p2 join
                   PropertyOwner po2
                   on p2.PropertyId = po2.PropertyId
              where po2.OwnerId = po.OwnerId and
                    p2.LoanId = @_givenLoanId
             );

0
投票

这就是你要找的东西:

SELECT OwnerId, PropertyId
FROM PropertyOwner
WHERE OwnerId IN 
(
    SELECT DISTINCT o.OwnerId
    FROM Property p 
    JOIN PropertyOwner o
        ON o.PropertyId = p.PropertyId
    WHERE LoanId = @_givenLoanId
);
© www.soinside.com 2019 - 2024. All rights reserved.