2012-03-26 2 views
3

나는 일부 테이블이 있습니다 나를 비난하지 마십시오SQL 쿼리 반환 직교 제품

 
Employee: id, name, id_suc, id dep, id_sec 
Suc  : id_suc, name 
Dep  : id_dep, id_suc, name 
Sec  : id_sec, id_dep, id_suc, name 

을, 이것은 내가 데이터베이스를 작성하지 않았고 있기 때문에 구조를 건드릴 수 없어, 기존의 응용 프로그램입니다 내부에 너무 많은 데이터가 있으며 보고서에 따라 다릅니다. 나는 질문에 따라 보고서를 수정하려고하고있다.

SELECT DISTINCT 
    s.name as sucurs, 
    d.name as depart, 
    c.name as section, 
    e.name AS emp 
FROM 
    employee e 
    join suc s on (e.id_suc = s.id_suc) 
    join dep d on (e.id_dep = d.id_dep) 
    join sec c on (e.id_sec = c.id_sec) 
ORDER BY 
    sucurs, depart, section, emp 

나에게 카티 제품을 제공합니다 :

나는 쿼리를 수행. 내가 원하는 :

sucurs1, depart1, section1, emp1 
sucurs1, depart1, section1, emp2 
..... 

(다음 SUC, 다음 출발하여 보고서 I 그룹, 다음 초에)

대신, 내가 가진 :

sucurs1, depart1, section1, emp1 
sucurs2, depart1, section1, emp1 

등등. ALL sucurs, ALL depart, ALL section을 가져오고 때로는 emp을 복제합니다.

나는 뭔가를 놓치고 있지만, 무엇을 모르고 있습니까? 모든 단서? 이 DepSuc에 연결되어 있음을 보일 수있을 것입니다 - -

답변

5

글쎄, 당신은 항상에만 employee에 테이블을 조인하고 그래서 당신은 두 번째 가입 조건이 필요합니다 (id_dep에뿐만 아니라 id_suc에뿐만 아니라 가입!). 표 Sec도 표와 세 개의 ID를 공유하므로 세 개의 JOIN 조건이 필요합니다.

SELECT DISTINCT 
    s.name as sucurs, 
    d.name as depart, 
    c.name as section, 
    e.name AS emp 
FROM 
    employee e 
INNER JOIN 
    suc s ON e.id_suc = s.id_suc 
INNER JOIN 
    dep d ON e.id_dep = d.id_dep AND e.id_suc = d.id_suc 
INNER JOIN 
    sec c ON e.id_sec = c.id_sec AND e.id_suc = c.id_suc AND e.id_dep = c.id_dep 
ORDER BY 
    sucurs, depart, section, emp 
+1

이렇게 만들었습니다. 고마워요! 다시는 이런 종류의 구조를 다룰 필요가 없기를 바랍니다 :) –