Lookup에서 재귀 CTE를 사용하는 방법
SQL 연산자를 사용할 수 있을지조차 확신할 수 없는 매우 구체적인 사용 사례가 있습니다.
나는 가지고 있다users
테이블, abranches
테이블 및 ausers_to_branches
보다.users_to_branches
뷰가 존재합니다.필요하기 때문에id
,username
,그리고.branch_id
부터users
, 및 abranch_name
(에는 없습니다.users
) 및 a.parentBranch_id
부터branches
테이블.
현재 조직도는 몇 개의 레이어로 구성될 수 있습니다.branch_id
는 사용자가 할당되어 있는 직접 브랜치입니다(예:재무) 단,parentBranch_id
그 이상의 레벨입니다(예:X사)예를 들어, 하나 이상의 계층이 있는 경우 재무(예:부기)parentBranch_id
파이낸스의 것이 될 것이다.branch_id
내가 필요한 건 구조의 가장 높은 수준을 보는 거야parentBranch_id
항상.그래서 부기의 경우로서branch_id
X사를 보고 싶다parentBranch_id
.
내가 보고 있는 논리는 무엇입니까?재귀적인 CTE를 사용해야 한다고 읽었습니다만, LOOKUP 기능을 구현하여 값을 전달하려면 어떻게 해야 합니까?
내 생각:이 함수는 항상 다음 사항을 확인해야 합니다.parentBranch_id
. NULL인 경우,branch_id
~하듯이parentBranch_id
. NULL이 아닌 경우,parentBranch_id
값어치branch_id
컬럼 - NULL이 될 때까지.
재귀 CTE를 사용하면 각 브랜치 ID의 궁극적인 부모 브랜치를 얻을 수 있습니다.다음과 같은 경우:
with recursive cte as (
select b.branch_id as ultimate_parent_branch_id, b.branch_id as branch_id
from branches b
where parent_branch_id is null
union all
select cte.ultimate_parent_branch_id, b.branch_id
from cte join
branches b
on b.parent_branch_id = cte.branch_id
)
select *
from cte;
그럼 다시 접속해서 이걸 쓰면 되겠네요.users
:
with recursive cte as (
select b.branch_id as ultimate_parent_branch_id, b.branch_id as branch_id
from branches b
where parent_branch_id is null
union all
select cte.ultimate_parent_branch_id, b.branch_id
from cte join
branches b
on b.parent_branch_id = cte.branch_id
)
select *
from users u join
user_branches ub
on u.user_id = ub.user_id join
cte
on cte.branch_id = ub.branch_id;
언급URL : https://stackoverflow.com/questions/67122843/how-to-use-recursive-cte-with-lookup
'source' 카테고리의 다른 글
.asSet(...)이 API에 있나요? (0) | 2022.09.30 |
---|---|
UUID에 대한 트리거를 삽입하기 전에 MariaDB (0) | 2022.09.30 |
이것은 안티 패턴입니까, 아니면 Vue가 파괴되었는지 여부를 검출하는 더 간단한 방법이 있습니까? (0) | 2022.09.29 |
Eclipse "오류: 주 클래스를 찾거나 로드할 수 없습니다." (0) | 2022.09.29 |
NULL을 허용하려면 MySQL 외부 키를 선택하십시오. (0) | 2022.09.29 |