DB/MySQL

임시테이블 생성 및 존재여부 확인 후 삭제

통통만두 2016. 12. 16. 09:52
반응형

MySQL 에서 임시테이블을 생성하고, 임시테이블의 존재여부를 확인 후 삭제하는 방법을 포스팅 하도록 하겠습니다.


/* 임시테이블 삭제 */
DROP TEMPORARY TABLE IF EXISTS tmp_tb_buyer_cohort_data_main;
DROP TEMPORARY TABLE IF EXISTS tmp_tb_buyer_cohort_data_copy_1;
DROP TEMPORARY TABLE IF EXISTS tmp_tb_buyer_cohort_data_copy_2;


/* 임시테이블 생성 */
CREATE TEMPORARY TABLE tmp_tb_buyer_cohort_data_main
(
code INT,
code_name VARCHAR(50),
part INT,
value DECIMAL(30, 13)
);

CREATE TEMPORARY TABLE tmp_tb_buyer_cohort_data_copy_1
(
code INT,
code_name VARCHAR(50),
part INT,
value DECIMAL(30, 13)
);

CREATE TEMPORARY TABLE tmp_tb_buyer_cohort_data_copy_2
(
code INT,
code_name VARCHAR(50),
part INT,
value DECIMAL(30, 13)
);

제가 만든 procedure 의 일부분입니다. 딱 보시면 아시기에 별다른 설명은 하지 않겠습니다.


하지만 저런 구조로 한 이유에 대해서 설명을 하겠습니다. MySQL 의 경우 임시테이블을 한 번의 쿼리에서 중복이 될 경우에는 에러를 발생하더군요. 예를들면


SELECT CODE, CODE_NAME, PART, VALUE
FROM tmp_tb_buyer_cohort_data_main a, tmp_tb_buyer_cohort_data_main b
WHERE b.code = a.code
AND b.part = b.part

위와 같은 코드는 임시테이블을 다시 오픈할 수 없다는 에러가 뜹니다. 왜 이런 정책을 사용하는 이유는 모르겠지만, 아무튼 저 방법대로는 사용할 수 없기에 같은 내용을 담은 테이블이더라도 한 쿼리에 같은 임시테이블이 from 절 또는 subquery 에 있을 경우 저런 방법을 통해서 해결하였습니다.


더 좋은 방법이 있을지는 모르겠습니다만.. 귀차니즘으로 인해서 일단 저렇게 사용하기로 했습니다.


날씨가 춥네요. 다들 감기 조심하시고 좋은 하루 보내세요.


반응형