안녕하세요
초보자입니다
데이터를 보고 로직을 구현해보려 하는데 머리속으로만 그려서 그런가 잘 안되서 고수님들의 조언을 구합니다
예를들어 A테이블에 값이 한글명과 영어가
주, mn
주식, cu
회, rf
회사, op
이렇게있고 B테이블에
주식회사라는 값이 있으면 두개 테이블을 비교해서 영어로 된 값을 가져오려하는데 경우에 수가 많더라고요 이럴경우 loop를 돌려야하나요? 아니면 단일쿼리로 가능할까요? 여러단어를 저런형태로 구현하려하니 너무 어렵습니다....고수님들의 한수 가르침 부탁드려요 ^^;;
WITH t AS ( SELECT '주' ko, 'mn' en FROM dual UNION ALL SELECT '주식', 'cu' FROM dual UNION ALL SELECT '회' , 'rf' FROM dual UNION ALL SELECT '회사', 'op' FROM dual --UNION ALL SELECT '식' , 'xx' FROM dual --UNION ALL SELECT '사' , 'yy' FROM dual ) , t1(ko_x, en_x) AS ( SELECT CAST(ko AS VARCHAR2(99)) ko_x , CAST(en AS VARCHAR2(99)) en_x FROM t WHERE INSTR(:v, ko) = 1 UNION ALL SELECT p.ko_x || c.ko ko_x , p.en_x || c.en en_x FROM t1 p , t c WHERE INSTR(:v, p.ko_x || c.ko) = 1 AND p.ko_x != :v ) SELECT * FROM t1 WHERE ko_x = :v ;
WITH t_a AS ( SELECT '주' ko, 'mn' en FROM dual UNION ALL SELECT '주식', 'cu' FROM dual UNION ALL SELECT '회' , 'rf' FROM dual UNION ALL SELECT '회사', 'op' FROM dual UNION ALL SELECT '식' , 'XX' FROM dual UNION ALL SELECT '사' , 'YY' FROM dual ) , t_b AS ( SELECT '주식회사' v FROM dual UNION ALL SELECT '주식' FROM dual UNION ALL SELECT '식사' FROM dual UNION ALL SELECT '주주' FROM dual UNION ALL SELECT '회식' FROM dual ) , t1(v, ko_x, en_x) AS ( SELECT b.v , CAST(a.ko AS VARCHAR2(99)) ko_x , CAST(a.en AS VARCHAR2(99)) en_x FROM t_a a , t_b b WHERE INSTR(b.v, a.ko) = 1 UNION ALL SELECT p.v , p.ko_x || c.ko ko_x , p.en_x || c.en en_x FROM t1 p , t_a c WHERE INSTR(p.v, p.ko_x || c.ko) = 1 AND p.ko_x != p.v ) SELECT * FROM t1 WHERE ko_x = v ORDER BY v, en_x ;
질문있습니다. t1이 괄호 안의 from절에 쓰인 t1과 중복이 되는데 상관이 없나요?
단순히 생각하면 테이블이 생성되지 않은 상태에서 t1을 사용하려는듯 보이는데
토드(oracle 10g)에서 실행하니
ORA-32033: 지원되지 않는 열 별칭 지정
라고 에러가 나와서요...
t1(v, ko_x, en_x) AS
(
생략...
SELECT p.v
, p.ko_x || c.ko ko_x
, p.en_x || c.en en_x
FROM t1 p
, t_a c
WHERE INSTR(p.v, p.ko_x || c.ko) = 1
AND p.ko_x != p.v
)