2014-04-02 6 views
0

이미 선택한 행의 값을 기반으로 데이터베이스의 조인 된 테이블에서 행을 선택하려고합니다. 기본적으로 부모 행이나 그랜트 행이 활성화 된 경우 결과에 하위 행 또는 하위 행을 포함시킵니다.MySQL : 이미 선택된 행의 값을 기준으로 행 선택

내가 원하는 결과를 얻기 위해 JOINSUNIONS의 다른 조합을 사용해 보았습니다.

표 1 : (목표 구성원이 목표로 설정을 사용할 수 또는 전체) 목표

id | name  | parent 
--------------------------- 
A | Obj A | null 
A1 | Obj A1 | A 
A2 | Obj A2 | A 
A2-1 | Obj A2.1 | A2 
B | Obj B | null 
B1 | Obj B1 | B 
B1-1 | Obj B1.1 | B1 
C | Obj C | null 
C1 | Obj C1 | C 
C1-1 | Obj C1.1 | C1 

표 2 : memberObjectives 다음

내 예제 데이터입니다 (목표 회원이 목표로 완수 또는 설정 함)

id | objective | member | status 
----------------------------------- 
1 | A   | 001 | goal 
2 | A1  | 001 | complete 
3 | C   | 001 | goal 

원하는 결과이 두 테이블을 가입하고 상태가 goal 또는 complete OR 경우 부모 또는 조부모 목적은 goal 또는 complete의 상태가 여기서 모든 행을 선택합니다. 부모 ACgoalA2-1C1-1의 상태가 포함되어 있기 때문에 그들이 goal 상태의 조부모가 있기 때문에

objective | member | name  | status 
------------------------------------------ 
A   | 001 | Obj A | goal 
A1  | 001 | Obj A1 | complete 
A2  | 001 | Obj A2 | null 
A2-1  | 001 | Obj A2-1 | null 
C   | 001 | Obj C | goal 
C1  | 001 | Obj C1 | null 
C1-1  | 001 | Obj C1.1 | null 

A2C2이 포함되어 있습니다. BB 테이블에 complete 또는 goal 상태의 테이블이 없으므로 해당 하위 및 그랜트 대상은 포함되지 않습니다. 내가 아는

내 최신 시도는, 다음과 같이 가까운 경우에도되지 않습니다 :

SELECT DISTINCT mo.objective, mo.member, o.name, mo.status 
    FROM objectives AS o 
    LEFT JOIN (SELECT * FROM memberObjectives 
    WHERE member = '001') AS mo ON o.id = mo.objective 
    LEFT JOIN objectives AS o2 ON o2.id = o.parent 
    LEFT JOIN objectives AS o3 ON o3.id = o2.parent 
    GROUP BY o.id 

당신이 제공 할 수있는 모든 도움을 주셔서 감사합니다!

+0

귀하의 ID가 A, A1 ... 등 숫자가 아니면 A ...를 원하는 유일한 것이면 쉽게 될 것입니다. 아니면 그저 당신의 모범인가? 왜냐하면 당신은 A를 걸러 낼 수 있기 때문입니다. 문제는 조부모가 조인만으로는 불가능하다는 것입니다. –

+0

@JohnRuddell'A'는 단지 예제 일뿐입니다. 나는 '목표'또는 '완료'상태이거나 부모 나 조부모가있는 상태 인 모든 'A'와 'C'를 얻고 싶지만, 'B'가없는 사람은 회원이 아니기 때문에 'B'를 완료하거나 목표로 설정합니다. –

+0

현재 테이블을 조인하는 방법이 있는지 궁금 해서요. 그래서'parentStatus'와'grandparentStatus'라는 두 개의 추가 열로 끝납니다. 따라서이 열들 중 하나 또는 원래의'status' 열이'goal' 또는 '완료'는 결과에 포함됩니다. ('WHERE status = '목표'OR 상태 = '완료'OR parentStatus = '목표'OR parentStatus = '완료'또는 grandparentStatus = '목표'OR grandparentStatus = '완료') –

답변

관련 문제