2016-08-11 7 views
1

조회 테이블을 사용하여 테이블을 쿼리하려고합니다. 이는 테이블에 동일한 값에 대해 다른 이름/코드가 있기 때문입니다.조회 테이블을 사용하는 쿼리 테이블

예를 들어, EmployeeProduction 테이블 Site의 같은 분야를 가지고 있지만이이 같은 Site을 통해 수행되는 접합을, 그것이 내가 Production에서 EmployeePercent에서 필드 Person을 원하는 differently.So 이름이있다.

=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 
어떤 도움을 주시면 감사하겠습니다

, 단지 캔트 주위에 내 머리를 감싸을 ..

답변

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

이것은 내 문제를 해결하지 못했지만 제안 사항은 해결되었습니다. –

1

이것은 까다 롭습니다. 정말로 데이터를 수정해야합니다. 그러나 다음과 같이 할 수 있습니다.

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; 
+0

데이터를 수정한다는 것은 무엇을 의미합니까? 이런 유형의 문제에 대한 좋은 관행은 무엇입니까? Btw 나는 많은 사이트와 SiteCodes를 가지고 있기 때문에이 솔루션이 나에게 실행 가능하다는 것을 믿지 않는다. 쿼리의 성능에 영향을주지 않을 것인가? 귀하의 회신에 감사드립니다! –

+0

@DavidA. . . . 사이트와 사이트 코드가 서로 다른 테이블에서 일관되도록 데이터를 수정해야합니다. –