반응형
탐색기의 전체 경로 처럼, 분류(category) 항목을 연결해서 보여줄 때 써먹을 수 있다.
(지출 > 기호품 > 간식 > 빵) 처럼 사용할 때.
예
상수 테이블A의 데이터가 다음 표처럼 있을 때
ID | 상위ID | 항목 |
1 | 이상한항목 | |
2 | 2 | 주항목 |
3 | 2 | 보조항목 |
기록용 테이블B에서 [항목]을 다음과 같이 표시되게 하려면?
ID [Primary Key] | 항목 [Int Type] |
1 | 이상한항목 |
2 | 주항목 |
3 | 주항목 > 보조항목 |
- [상위ID]가 없는 이상한항목은 그대로 출력
- [ID]와 [상위ID]가 같은 레코드는 값을 그대로 출력
- [상위ID]가 다른 레코드의 [ID]를 가리키는 레코드는 문자열 앞에 '상위항목 > ' 문자열을 붙여서 출력
- GRID, VIEW에서만 문자열을 붙여서 보여줄 뿐, 실제 DB레코드에는 [ID] 숫자가 들어간다.
테이블B의 [항목]의 필드 속성 중 조회-행 원본 입력란에 다음과 같이 적용하면 된다.
열 너비는 0cm;5cm 처럼 ID영역을 숨겨야 [항목] 문자열 값이 입력 된다.
SELECT 테이블A.ID AS ID, (C.NEW항목 & 테이블A.항목) AS 항목
FROM 테이블A
LEFT JOIN
(SELECT A.ID, A.상위ID, B.항목+' > ' AS NEW항목
FROM 테이블A AS A
LEFT JOIN 테이블A AS B ON B.ID = A.상위ID
WHERE A.상위ID <> 0 and A.상위ID <> A.ID) AS C ON 테이블A.ID = C.ID
방금 전에 SQL문을 익힌 초보자가 만든거라 코드가 복잡하다.
- 먼저 [상위ID] 값이 있고, [ID]와 [상위ID] 값이 다른 레코드를 찾는다. (테이블A에서 3번 레코드겠지?)
- 위에서 찾은 결과물의 항목값과 ' > ' 문자열을 '+' 기호로 합쳐서 [NEW항목] 컬럼에 기록한다.
- 위에서 합친 문자열([항목]+' > ')이 있는 [NEW항목]과 기존 [항목]값을 붙여서 [항목] 컬럼에 기록한다.
& 기호는 곱하기 연산이고, + 기호는 더하기 연산이다.
+, & 기호를 잘못 사용하면 결과물이 달라진다.
개정
2023-11-14. 표 값 오류 정정. 설명 변경.
반응형