Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 左键连接两个参考表以获得正确的值_Sql_Sql Server_Join - Fatal编程技术网

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,这会让事情变得更慢:)是的,这更简单,在发布问题之前,我确实试图与工会合作,但我没有得到正确的数据。