如何在SQL中减少两个关系到一个关系?

时间:2016-11-22 12:08:01

标签: sql-server tsql

我有一张表ContractTable,其中有三列,如下所示

ContractID |  CompanyID | ContractorID
-----------+------------+----------
     2     |    37725   |    37730 

此表与此视图ViewNameList

有关
    ID     |  CompanyTitle
-----------+--------------
 37725     |      X  
 37730     |      Y  

我不希望得到两个加入的结果。有没有办法得到像下面这样的结果?

ContractID |  CompanyID | ContractorID
-----------+------------+----------
     2     |      X     |     Y 

2 个答案:

答案 0 :(得分:0)

您需要JOIN两次视图

select y.ContractID,v1.CompanyTitle as CompanyID,v2.CompanyTitle as ContractorID
from yourtable y
Left join view  v1 on y.CompanyID  = v1.ID     
Left join view  v2 on y.ContractorID = v2.ID     

如果您不想加入两次,请尝试此

SELECT y.ContractID,
       Max(CASE WHEN y.CompanyID = v.ID THEN v.CompanyTitle END) AS CompanyID,
       Max(CASE WHEN y.ContractorID = v.ID THEN v.CompanyTitle END) AS ContractorID
FROM   yourtable y
       JOIN [view] v
         ON v.ID IN ( y.CompanyID, y.ContractorID )
GROUP  BY y.ContractID 

答案 1 :(得分:0)

如果加入困扰你,你可以在没有任何联接的情况下做到这一点。即:

SELECT t1.ContractID ,
       (SELECT CompanyTitle FROM ViewNameList t2 WHERE t2.ID = t1.CompanyID) CompanyID,
       (SELECT CompanyTitle FROM ViewNameList t2 WHERE t2.ID = t1.ContractorID) ContractorID
       FROM ContractTable t1;

当然,在Linq中这样做更容易:

var contracts = from c in db.Contracts
                select new {
                   ContractID   = c.ContractID,
                   CompanyID    = c.Company.CompanyTitle,
                   ContractorID = c.Contractor.CompanyTitle
                };