2016-11-22 56 views
0

我有一个表ContractTable三列这样如何在SQL中减少两个关系到一个关系?

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

此表有关系,这种观点ViewNameList

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

我不想得到结果和两个连接。有一种方法可以像一个关系一样获得结果吗?

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

回答

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 
+0

不,我只需要一个连接。 –

+0

@SasanKarimi - 检查更新 –

+0

非常感谢你@Prdp。有效。 –

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 
       }; 
相关问题