안녕하세요.
mysql에서 각 테이블의 ID를 가지고 PATH를 만들었습니다.
ID | CODE | PATH |
1234 | 1 | 1,11,31,35 |
1235 | 2 | 1,11,38 |
1,11,31,35
저 PATH 정보로 테이블을 조회해서 정보를 한꺼번에 가져오고 싶습니다.
예를들어 1,11,31,35 PATH 일때는
select name1 from testA where id = 1;
select name2 from testB where id = 11;
select name3 from testC where id = 31;
select name4 from testC where id = 35;
로 조회된 각각의 이름을 가져오는 쿼리는 어떻게 가능할까요???
원하는 결과
name1 | name2 | name3 | name4 |
그리고 두번째 쉼표 이상 부터는 무조건 쉼표를 없애고 값을 합쳐서있는 방법이 있을까요?
PATH = 1,11,38 일때
select name from testCAR where id = 38;
PATH = 1,11,31,35 일때
select name from testCAR where id = 3135;
도움좀 부탁드립니니다.
네 현재는 4개가 최대입니다!!!
name 정보를 가진 테이블이 a, b, c 각각 맞습니다.
A테이블
ID | NAME |
1 | test1 |
2 | test2 |
B테이블
ID | PID | NAME |
11 | 1 | sub test1 |
12 | 1 | sub test2 |
13 | 2 | sub test3 |
c테이블
ID | PID | NAME |
31 | 11 | my name31 |
32 | 13 | my name32 |
33 | 31 | my name33 |
34 | 41 | my name34 |
35 | 12 | my name35 |
위 테이블에서 PATH 정보가 1,11,31,35일때
제가 원하는데이터 입니다.
test1 | sub test1 | my name31 | my name35 |
PATH 정보가 2,13,32 라면
test2 | sub test3 | my name32 |
PATH의 두번째 이후는 C테이블에서만 조회 되어야 합니다.
설명이 부족해서 죄송합니다.ㅠㅠ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | WITH test_m AS ( SELECT 1234 id, 1 code, '1,11,31,35' path UNION ALL SELECT 1235, 2, '2,13,32' ) , test_a AS ( SELECT 1 id, 'test1' name UNION ALL SELECT 2, 'test2' ) , test_b AS ( SELECT 11 id, 1 pid, 'sub test1' name UNION ALL SELECT 12, 1, 'sub test2' UNION ALL SELECT 13, 2, 'sub test3' ) , test_c AS ( SELECT 31 id, 11 pid, 'my name31' name UNION ALL SELECT 32, 13, 'my name32' UNION ALL SELECT 33, 31, 'my name33' UNION ALL SELECT 34, 41, 'my name34' UNION ALL SELECT 35, 12, 'my name35' ) SELECT m.id , m.code , m.path , a. name name1 , b. name name2 , c. name name3 , d. name name4 FROM test_m m INNER JOIN test_a a ON SUBSTRING_INDEX(SUBSTRING_INDEX(m.path, ',' , 1), ',' , -1) = a.id INNER JOIN test_b b ON SUBSTRING_INDEX(SUBSTRING_INDEX(m.path, ',' , 2), ',' , -1) = b.id LEFT OUTER JOIN test_c c ON SUBSTRING_INDEX(SUBSTRING_INDEX(m.path, ',' , 3), ',' , -1) = c.id LEFT OUTER JOIN test_c d ON SUBSTRING_INDEX(SUBSTRING_INDEX(m.path, ',' , 4), ',' , -1) = d.id ; |
정말 감사합니다. 덕분에 해결 되었습니다.
염치 불구 하지만 한가지 더 궁금한게 있습니다.^^;;;
C테이블기준으로
PATH 정보가 1,11,31,35일때 뒤에 31,35의 정보로 아래와 같이 테이블을 하나더 만들었습니다.
ID | PATH | name | pay |
1 | 3135 | my name31/my name35 | 1000 |
2 | 3136 | my name31/my name36 | 2000 |
3 | 3137 | my name31/my name36 | 3000 |
4 | 32 | my name32 | 3500 |
5 | 33 | my name33 | 2100 |
6 | 34 | my name34 | 2000 |
7 | 3537 | my name35/my name37 | 3200 |
이렇게 만들고 보니 PATH컬럼이 중복 값이 들어 가버리네요.
예를 들면 PATH 정보가 1,11,3,135 일때와 1,11,31,35일때 둘다 3135로 중복이 되어버리는데요.
어떻게 해결해야 할까요....