sql - 左连接两个引用表以获得正确的值

标签 sql sql-server join

我有一个包含客户数据的表,我必须将它与两个引用表连接起来才能获得所需的文本值。所以有人不知何故没有将所有数据包含在一个引用表中,所以对于某些数据,我需要从另一个表中获取值。

第一个包含数据的表

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,所有其他 CompanyID 都来自 tblCompanies....

我怎样才能加入这两个表?没有重复记录。我尝试了 UNION 和 UNIOAN ALL 但没有成功

最佳答案

首先联合你的tblcompaniestblReferences表在一起,然后加入:

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

关于sql - 左连接两个引用表以获得正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46183212/

相关文章:

sql - 使用 JDBC 从多个表中选择时如何识别列?

mysql - 何时在连接表上添加索引

mysql - 从给定标识符的多个条目中检索行,仅从一组值中检索一个列值

mysql - 重命名MySQL中所有表名的部分

php - Laravel 查询一个时间范围

mysql - 这里的语法错误是什么?

sql-server - 如何在 Sql Server 中保护数据库免受服务器管理员的攻击

sql-server - 不使用游标填充表的 ID 列

sql - 从多个联接返回 1 行到同一个表 - SQL Server

NHibernate - 左连接