2014-07-20 2 views
0

MS Access를 통해 SQL을 사용하여 구조와 같은 treeview를 반환 할 수 있어야합니다. 그러나 내부 조인 하위 쿼리를 수행하는 방법을 잘 모르겠습니다. o.pack_ID와 o.pdata1 사이의 관계가있는 것처럼 내 코드는 지금까지 내가 또한 자체 조인을 수행 할 필요가MS Access SQL 하위 쿼리

SELECT o.name,o.pdata1,o.pack_ID,p.name,p.pack_ID,p.parent_ID 
    FROM t_obj AS o 
    INNER JOIN t_pack AS p on o.Pack_ID = p.Pack_ID 
    WHERE o.pdata1 IN (
     SELECT o2.pdata1 
     FROM t_obj AS o2 
     ) 
    ORDER BY p.parent_ID ASC 

입니다. 추가 논의를 바탕으로

샘플 데이터

o.Name   o.Pack_ID p.Pack_ID p.Name  p.Parent_ID o.PDATA1 
Artifacts  1   1   AC   0    297 
Template  1   1   AC   0    281 
WA    1   1   AC   0    361 
Alisha   361   361   WA   1    611 
Damian   361   361   WA   1    480 
ABC    297   297   Artifacts 1    
DEF    297   297   Artifacts 1 
+0

"어디서 o.pdata1 IN (선택 o2.pdata1 FROM t_obj AS o2)"의 목적은 무엇입니까? 이 하위 테이블은 상위 쿼리와 동일한 테이블 (t_obj)을 참조합니다. 즉, 테이블 t_obj의 모든 pdata1 값이 해당 테이블에 있기 때문에 아무 것도하지 않습니다. –

+1

소량의 샘플 데이터와 예상 출력을 제공 할 수 있습니까? –

+0

@Brian DeMilia - 일부 샘플 데이터로 게시물을 업데이트했습니다. 예상 결과는 표 형식 인 경우에도 나무 같은보기 또는 적어도 부모 - 자식 같은 관계를 표시하는 것입니다. – PeanutsMonkey

답변

1

- 당신이 추락 한 번만 각 PARENT_NAME을 표시 할 경우

select o.name as parent_name, p.name, p.package_id, p.parent_id 
    from t_pack p 
inner join t_obj o 
    on CStr(p.parent_id) = o.pdata1 
union all 
select o2.name as parent_name, o.name, o.package_id, o.package_id 
    from t_obj o 
inner join t_obj o2 
    on CStr(o.package_id) = o2.pdata1 
order by parent_id 

는 피벗 테이블을 확인합니다.

pdata1이 숫자 데이터 유형이 아니고 숫자 데이터 유형 인 필드와 조인해야하므로 CStr이 사용됩니다. (그냥 다른 사람이 알고 있도록 restating)