Sql 使用查找表查询表

Sql 使用查找表查询表,sql,sql-server,join,lookup-tables,Sql,Sql Server,Join,Lookup Tables,我正在尝试使用查找表来查询表,这是因为对于相同的值,表具有不同的名称/代码 例如,Employee和Production表具有相同的Site字段,但它们的名称不同。因此,我希望字段Person来自Employee和Percent来自Production,这种连接是通过相同的站点进行的 =Employee= id | Person | Site ---+----------+------ 1 | Joe | Mex 2 | Sally | MXN 3 | Eric

我正在尝试使用查找表来查询表,这是因为对于相同的值,表具有不同的名称/代码

例如,
Employee
Production
表具有相同的
Site
字段,但它们的名称不同。因此,我希望字段
Person
来自
Employee
Percent
来自
Production
,这种连接是通过相同的
站点进行的

=Employee=
id | Person   | Site
---+----------+------
 1 | Joe      | Mex
 2 | Sally    | MXN
 3 | Eric     | Mex
 4 | John     | USA

=Production=
id |     %    | Site
---+----------+------
 1 |    98    | Mexico
 2 |    97    | USA
 3 |    98    | India
 4 |    96    | Thailand


=SiteCode=
id | Site     | Sitecode
---+----------+------
 1 | Mexico   | Mex
 2 | Mexico   | MXN
 3 | USA      | USA
 4 | USA      | Unite States of America
所需输出:

 Person   | %
----------+------
 Joe      | 98
 Sally    | 98
 Eric     | 98
 John     | 97
已经尝试了以下内容:

select Employee.Person, Production.Percent
from
Employee INNER JOIN SiteCode
on Employee.Site = SiteCode.Sitecode
INNER JOIN SiteCode.Sitecode = Production.Site

任何帮助都将不胜感激,只是不能让我的大脑围绕它。

这很棘手。你真的应该修复数据。但是,你可以这样做:

select Employee.Person, Production.Percent
from
Employee 
   INNER JOIN SiteCode on Employee.Site = SiteCode.Sitecode
   INNER JOIN Production on SiteCode.Site = Production.Site
with sc as (
      select sc.*,
             (case when sitecode = 'Unite States of America' then 'USA'
                   else sitecode
              end) as new_sitecode
      from sitecode sc
     )
select e.Person, p.percent
from employee e join
     sc
     on e.site = sc.new_sitecode join
     production p
     on p.site = sc.site;

修复数据是什么意思?对于这类问题,什么是好的做法?顺便说一句,我不相信这个解决方案对我来说是可行的,因为我有很多站点和站点代码,这不会影响查询的性能吗?谢谢你的回复@大卫达。您应该修复数据,以便不同表中的站点和站点代码保持一致。