조회된 컬럼명으로 다른 테이블의 컬럼 데이터 가져오기?? 0 2 9,455

by 배기염 [SQL Query] [2013.09.09 17:00:59]


예를 들어.. 
param_define이라는 테이블의 컬럼으로 parameter_name, db_column 두개의 컬럼이 있고

데이터는
(1, 'name')
(2, 'code')
(3, 'address') 이렇게 들어가 있다고 가정하고,.

customer라는 테이블의 컬럼이 name, code, address가 있다고 가정했을때,
(customer에는 키가 없고 하나의 데이터만 갖습니다. (데이터 변경은 조건없이 업데이트)

param_define 테이블의 데이터를 가져와서 customer의 데이터를 컬럼명 맞는 데이터를 가져올수가 있을까요?

결과는

parameter_name, db_column, data(임시)
1                         name         '홍길동'
2    code         'KILDONG'
3    address         '제주도'

이런식으로 나오는 조건문이 바보같은 걸까요?
가능하다면 어떤 식으로 조인해야 되나요?

너무 우스운 질문일수도 있을지 모르지만.. 진지한 질문입니다.
응용 프로그램쪽에서 처리할 것인지.. 쿼리문으로 처리할것인지 고민하고 있거든요..
by 아발란체 [2013.09.09 17:12:46]

data(임시)가 customer 테이블에서 나온 것 같은데,
1 name ==> 홍길동이고
2 code ==> KILDONG
이라고 연결 할 수 있는 값이 없습니다.

CUSTOMER 테이블에 키가 없고 1개 항목만 있다면 테이블 설계가 잘못된 것 같습니다.
테이블 구조를 조금 수정하면 쿼리문으로 충분히 가능합니다.
또한 테이블 구조를 수정하지 않고 프로그램에서 처리한다고 해도 같은 문제가 있습니다.

어떤 기준으로 CUSTOMER 데이타를 PARAM_DEFINE 데이타에 연결을 할 것인지 그 단서가 없기 때문입니다.
그 단서가 있다면 그 단서로 쿼리 레벨로 조인 할 수 있습니다.

예로 테이블 구조를 조금 변경한다면
CUSTOMER 테이블에 항목 1개 추가된 구조로
craete table customer ( parameter_name int, data varchar(50));

1, 홍길동
2, kildong
3, 제주도

이렇게 값이 들어간다면

SELECT  T1.*, T2.DATA FROM PARAM_DEFINE T1, CUSTOMER T2 WHERE T1.parameter_name = T2.parameter_name 식으로 말씀하신 결과를 얻을 수 있습니다.


by 아린 [2013.09.09 17:45:00]
원하시는건 테이블 조인으로 하시면 될듯한데요,
param_define 테이블에 컬럼하나 추가하는건 어떤가요.

-- 조인
WITH param_define(parameter_name, db_column) AS(
SELECT 1, 'name'    FROM dual UNION ALL
SELECT 2, 'code'    FROM dual UNION ALL
SELECT 3, 'address' FROM dual
), customer(name, code, address) AS(
SELECT '홍길동', 'KILDONG', '제주도' FROM dual
)
SELECT parameter_name, db_column
     , DECODE(db_column,    'name',    name
                       ,    'code',    code
                       , 'address', address) data
  FROM param_define a
     , customer b

-- 컬럼추가 
WITH param_define(parameter_name, db_column, val) AS(
SELECT 1,    'name',   '홍길동' FROM dual UNION ALL
SELECT 2,    'code', 'KILDONG' FROM dual UNION ALL
SELECT 3, 'address',   '제주도' FROM dual
)
SELECT *
  FROM param_define
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입