Sql 左键连接两个参考表以获得正确的值
我有一个包含客户机数据的表,我必须将它与两个引用表联接,以获得所需的文本值。所以有人不知何故没有将所有数据包含在一个引用表中,所以对于一些数据,我需要从另一个表中获取值 第一个包含数据的表Sql 左键连接两个参考表以获得正确的值,sql,sql-server,join,Sql,Sql Server,Join,我有一个包含客户机数据的表,我必须将它与两个引用表联接,以获得所需的文本值。所以有人不知何故没有将所有数据包含在一个引用表中,所以对于一些数据,我需要从另一个表中获取值 第一个包含数据的表 ID ClientID CompanyID 1 199 80 2 187 91 3 85 1001 4
ID ClientID CompanyID
1 199 80
2 187 91
3 85 1001
4 83 1145
可以看到,公司ID在80-1200之间变化
问题是,只有大于1000的值存储在公司的参考表中,因此
tblCompanies
CompanyID CompanyName
1001 Microsoft
1002 Apple
1145 HP
其余的公司名称存储在另一个表中
tblReference
ID FldName Label
80 Company Adobe
81 Company Amazon
91 Company Pixel
tblReference还有很多其他数据,但在大多数情况下,它只引用80-90之间的ID,而所有其他公司ID都来自TBL公司
我怎样才能连接这两个表?没有重复的记录。我尝试了UNION和UNIOAN,但都没有成功首先将您的
TBL公司
和TBL参考
表合并在一起,然后加入:
SELECT t1.id, t1.clientid, t1.CompanyID, t2.CompanyName
FROM firstTable as t1
INNER JOIN
(
SELECT companyID, companyName FROM tblCompanies
UNION ALL
SELECT id, label FROM tblReference WHERE fldname = 'Company'
) t2 ON t1.CompanyID = t2.CompanyId
根据你的例子,既然CompanyID不会同时出现在两个表中,为什么不把它们都加入呢?而且,UNION都保留重复项,UNION不保留
select
d.id
,d.ClientID
,d.CompanyID
,Company = coalesce(c.CompanyName,r.Label)
from
Data d
left join
tblCompanies c on
c.CompanyID = d.CompanyID
left join
tblReference r on
r.id = t.CompanyID
and r.FldName = 'Company'
where
coalesce(c.CompanyName,r.Label) is not null --optional
不用担心@BobSki,我确实不认为有必要像其他答案那样建立一个工会或cte,这会让事情变得更慢:)是的,这更简单,在发布问题之前,我确实试图与工会合作,但我没有得到正确的数据。