반응형
계층형 MariaDB/MySQL 재귀 쿼리(부모 전용)
아래 표를 가지고 있으며 아래에 결과를 반환하기 위해 MariaDB / mySQL에 적절한 SQL 쿼리를 작성하고 싶습니다.
"dirID" "parentID" "name"
"1" "0" "C:\"
"2" "1" "\temp"
"3" "1" "\Users"
"4" "3" "\Jon"
dirID name
1 C:
2 C:\temp
3 C:\Users
4 C:\Users\John
지금까지 저는 CASE WHEN을 사용하려고 노력하고 있는데, 제가 확신하기에는 너무 비효율적이고 다음과 같은 문제에 대한 해결책이 아닙니다.
cDir는 자식 dir이고 pDir는 부모:
SELECT
cDir.dirID,
cDir.parentID,
cDir.name AS name,
CASE
WHEN cDir.parentID != 0 THEN ( SELECT pDir.name )
END AS path
FROM dirs AS cDir
JOIN dirs AS pDir ON cDir.parentID = pDir.dirID
그래서 마지막으로 저는 CONCAT를 하고 싶습니다.
도와드릴까요?감사해요.
MariaDB 및 MySQL에는 계층/재귀 쿼리가 없지만 제한된 수준으로 쿼리를 수행할 수 있습니다.
이것은 최대 9개 수준의 쿼리 처리입니다.
select d1.dirID, concat_ws('', d9.name, d8.name, d7.name,
d6.name, d5.name, d4.name, d3.name, d2.name, d1.name) as name
from dirs d1
left join dirs d2 on d2.dirID=d1.parentID
left join dirs d3 on d3.dirID=d2.parentID
left join dirs d4 on d4.dirID=d3.parentID
left join dirs d5 on d5.dirID=d4.parentID
left join dirs d6 on d6.dirID=d5.parentID
left join dirs d7 on d7.dirID=d6.parentID
left join dirs d8 on d8.dirID=d7.parentID
left join dirs d9 on d9.dirID=d8.parentID
http://sqlfiddle.com/ #!2/3b1c70/1
언급URL : https://stackoverflow.com/questions/26886489/hierarchical-mariadb-mysql-recursive-query-parent-only
반응형
'itsource' 카테고리의 다른 글
PowerShell에서 전체 화면으로 이동하는 방법 (0) | 2023.09.04 |
---|---|
Windows 10에서 'rimraf는 인식되는 명령이 아닙니다'를 수정하는 방법 (0) | 2023.08.30 |
AVPlayer 비디오 재생이 종료되는 시점을 탐지하는 방법은 무엇입니까? (0) | 2023.08.30 |
UIView에서 선 그리기 (0) | 2023.08.30 |
오라클 테이블에 데이터를 삽입하는 가장 빠른 방법은 무엇입니까? (0) | 2023.08.30 |