2010-07-16 2 views
9

단일 테이블에 대해 여러 개의 별칭 이름을 사용할 수 있습니까?테이블의 여러 별칭 이름

+0

왜 하시겠습니까? 작동하지 않는 특정 쿼리가 있습니까? –

+0

그게 필요한거야? –

+1

여러 역할에있는 자체 조인 또는 테이블. 후자의 예는 여러 날짜가있는 사실 테이블에 조인하는 날짜 차원 테이블 일 수 있습니다. – ConcernedOfTunbridgeWells

답변

11

예.

:

create table Foo (
    FooID int 
    ,ParentFooID int 
    ,[columns] 
) 

당신은이 같은 쿼리로 특정 조건을 만족하는 부모의 자식을 얻기 위해 가입 할 수 있습니다 : 당신은 당신이 계층 구조를 저장하는 테이블이 f를 예를 들어 self join,이 작업을 수행 할 필요가

Select b.* 
    from Foo a 
    join Foo b 
    on a.FooID = b.ParentFooID 
    and [some condition filtering a] 
+1

+1의 추측력! –

+0

하지만 성능에 영향을 줄 것인가? –

+0

쿼리 최적화 프로그램은 조인 조건자를 해결하는 데 필요한 모든 작업을 수행해야합니다. 예를 들어 테이블이 크고 ParentFooID에 대한 인덱스가있는 경우 FooID - ParentFooID 조인을 해결하기 위해 인덱스 조회를 수행해야 할 수 있습니다. 경기를하는 것은 항상 약간의 자원을 필요로합니다. – ConcernedOfTunbridgeWells

3

아니요, 동일한 테이블에 있지는 않지만 동일한 테이블을 두 번 선택하고 각각 다른 별칭을 지정할 수 있습니다.

이렇게하면 단일 쿼리 내에서 다른 목적으로 동일한 테이블을 사용할 수 있습니다.

+0

하지만 성능에 영향을 미치지 않습니까? –

+0

예, 테이블을 두 번 선택하면 작업량이 두 배가됩니다. 성능은 사용 방법, 조인 된 항목 및 쿼리 최적화 프로그램에서 사용할 수있는 인덱스와 통계에 따라 다릅니다. –

+0

Chris의 쿼리에는 조인 조건 (암시 적 또는 명시 적)이 없기 때문에 데카르트 조인이 예상됩니다. 테이블의 모든 단일 행은 동일한 테이블의 모든 행과 연결되므로 테이블에 20 개의 행이 있으면 결과 집합은 400 행이됩니다! 이것은 두 배의 작업보다 훨씬 나 빠릅니다. 그러나 작업을 유발하는 것은 별칭이 아니며, 데카르트 조인입니다. –

관련 문제