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