2012-07-07 8 views
1

2 개의 테이블이 있습니다. (한 노동자가 다른 책임 수 있기 때문에) 행 worker_parent이테이블을 여러 개 조인하는 방법은 무엇입니까?

노동자와 테이블 노동자에서 경험

. 그런

아니 내가 연결해야합니다 테이블 :

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) 

그리고 그 괜찮습니다. 하지만 나는 w2의 경험으로 주문해야하며 테이블 경험을 추가하려고 노력하지만 그것은 w1에 연결되어 있고 w2에 연결되어 있지 않습니다.

제 질문은 w2에서 테이블 경험 (행은 worker_id)을 추가하고 w1에서 경험 및 SELECT 데이터를 선택하는 방법입니다.

이것은 내 시도입니다.

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) LEFT JOIN experience e ON (w2.id = e.worker_id) ORDER BY e.experience DESC 

는 감사의 도움을

+0

및 whats wrong whit your query? 부모가있는 부모의 exprience에 의한 정렬 노동자 –

+1

당신이'W2'와'experience' 테이블로부터 어떤 데이터도 보여주지는 않지만 SQL은 꽤 정확 해 보입니다. 즉,'W2'에'W1'을위한 행이 여러 개 있고 '경험'에서'W2'와 비슷한 경우 출력물의'W1'에있는 각 행에 대해 여러 행을 갖게됩니다. 이해하기 위해서'W1' 컬럼과'W2' 컬럼과'Experience' 컬럼을 표시해야합니다. – somnath

+0

@somnath - w1의 데이터 만 필요합니다. – CroiOS

답변

1

만 experince와 부모가 자식 근로자를 원한다면, 당신이 어디를 추가 할 필요가 (또는 변경 유형에 가입) (가독성을 위해 내가 W1 및 W2로 변경 w_child 및 w_parent)

SELECT w_child.*, e_parent.experience 
FROM workers AS w_child 
LEFT JOIN workers AS w_parent ON (w_parent.id = w_child.worker_parent) 
LEFT JOIN experience AS e_parent ON (w_parent.id = e_parent.worker_id) 
WHERE e_parent.worker_id IS NOT NULL 
ORDER BY e_parent.experience DESC 
+0

그게 전부 야. – CroiOS

관련 문제