문제

테이블을 쿼리에는 2 열(functionId,depFunctionId)

내가 원하는 모든 값들 중에서 functionid 또는 depfunctionid

나는 사용:

select distinct depfunctionid from Query
union 
select distinct functionid from Query

더 나은 작업을 수행하는 방법?

도움이 되었습니까?

해결책

나는 그것이 당신이 얻을 수있는 최고라고 생각합니다.

다른 팁

그건 생각만큼 좋아요 ...

당신의 노조 (vs vs vs 모두)가 복제물 제거를 돌볼 것이므로 독특한 조항을 잃습니다.

대안 - 그러나 아마도 덜 명확하고 아마도 동일한 실행 계획을 가진 것은 2 열을 전체에 가입하는 것입니다.

SELECT 
    COALESCE(Query1.FunctionId, Query2.DepFunctionId) as FunctionId
FROM Query as Query1
FULL OUTER JOIN Query as Query2 ON
    Query1.FunctionId = Query2.DepFunctionId

나는 거의 확실히 당신을 풀 수 있는 독특한다.을 사용할 때 조합을 대신 연합의 모든 복제 결과가 됩니다.

그것은 모든 방법에 따라 중의적인 쿼리입니다.키에 대한 더 나은 perfomance 를 실행하는 것입 한 번만,그러나 그것이 가능하지 않은 주어진 데이터는 반환합니다.

당신이 그것을 할 경우 다음과 같다:

select depfunctionid , functionid from Query
group by depfunctionid , functionid

그것은 매우 가능성이 얻을 것이다 반복되는 결과에 대한 depfunctionid 또는 functionid.

내가 잘못 될 수 있지만,그것은 당신이 검색하고있는 나무의 종속성입니다.의 경우 경우 나 개인적으로 사용하려고 구체화된 경로로 접근 방식이다.

는 경우에 구체화 경로에 저장된 자기 표를 참조하는 이름,나는 검색을 나무 같은 것을 사용하는

select asrt2.function_id
from   a_self_referencig_table asrt1,
       a_self_referencig_table asrt2
where  asrt1.function_name = 'blah function'
and    asrt2.materialized_path like (asrt1.materialized_path || '%')
order  by asrt2.materialized_path, asrt2.some_child_node_ordering_column

이 검색 전체 트리에 있습니다.무엇을 짜증이 필요성이 구체화된 경로를 기반으로 function_id 및 parent_function_id(또는 귀하의 경우에는,functionid 및 depfunctionid),지 트리거을 돌볼 수 있습니 그것은 매우 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top