2017-02-05 1 views
1

이것은 동물원의 한 예입니다.파생 테이블을 사용하는 SQL INNER JOIN 하위 쿼리

employee, animal 및 animal_employee의 세 테이블이 있습니다. 두 테이블 간의 관계를 설정하는 n : m 테이블입니다. 동일한 동물을 다루는 직원을 쿼리하고 싶습니다. 그러나 나는 그것을하는 방식으로 ID 번호 만 출력 할 수 있습니다. 나는 테이블에서 찾을 수있는 실제 이름 인 종업원과 동물을 출력하고 싶다.

이것은 내가 지금 무엇을 가지고 다음 FROM 절에

select distinct a.animal, a.employee, b.employee 
from animal_employee a, animal_employee b 
where a.animal = b.animal and a.employee > b.employee 
+0

테이블 스키마 게시. – McNets

답변

0

첫째, 결코 사용 쉼표. 항상은 적절하고 명시적인 JOIN 구문을 사용합니다.

나는 내가 CTE 함께 할 것이라고 생각 :

with ae as (
     select ae.*, e.name as employee_name, a.name as animal_name 
     from animal_employee ae join 
      employee e 
      on ae.employee = e.?? join -- don't know what is used for the `JOIN` here 
      animal a 
      on ae.animal = a.??   -- don't know what is used for the `JOIN` here 
    ) 
select a1.animal_name, ae1.employee_name, ae2.employee_name 
from ae ae1 join 
    ae ae2 
    on ae1.animal = ae2.animal and ae1.employee < ae2.employee; 

귀하의 질문은 테이블 구조에 대한 불분명하다. ??은 조인에 사용할 열을 나타냅니다.

결과 집합에 중복이있는 경우에만 select distinct이 필요하며, 중복되는 테이블이있는 경우에만 발생합니다 (가능성이 낮음).

+0

, 고맙습니다. –

+0

그냥 작은 수정을 공유하는 기억. "e.name as animal_name"에서 "a.name"입니다. 어쨌든 다시 큰 감사를드립니다. –

+0

@ FilipeBreda. . . 고맙습니다. –