아래와 같은 값을 가지고 있는 테이블 TMP1이 있습니다.
A_VALUE | B_VALUE |
10 | 14600 |
20 | 15000 |
30 | 15200 |
그리고 아래와 같은 값을 가지고 있는 테이블 TMP2가 있습니다.
A_VALUE | B_VALUE |
10 | |
20 | |
30 |
이 때 실행할 쿼리문은 아래와 같습니다.
UPDATE TMP2 SET B_VALUE = (SELECT B_VALUE FROM TMP1 WHERE A_VALUE = TMP2.A_VALUE) WHERE A_VALUE IN (SELECT A_VALUE FROM TMP1);
위 쿼리는 SQLite나 Sybase나 문법이 같아서 둘 다 실행은 됩니다.
문제는 SQLite에서는 TMP2에 정상적으로 14600,15000,15200 값이 들어가는데 비해
Sybase에는 1,1,1 이렇게 값이 들어갑니다.
문법적으로 오류가 없어보이는데 왜 이런걸까요?
정확한 문제가 아니여도 혹시 이런 문제가 아닐까? 라는 것도 말씀해주시면 감사하겠습니다.
(해결)
create temporary local table select 방식으로 만든 임시테이블이었는데 만들지 말고 declare local temporary table 방식으로 만들어서 자료형을 제대로 명시해주니까 해결됬습니다. 감사합니다. ^^
-- 우선 Select 결과가 올바른지 확인해 보시구요. SELECT a_value , b_value , (SELECT b_value FROM tmp1 WHERE a_value = tmp2.a_value) new_value FROM tmp2 ; -- Sybase 는 Join Update 가 가능합니다. 구문을 바꿔 보세요. -- 우선 조인 결과 확인해 보고 SELECT a.a_value , a.b_value , b.b_value new_value FROM tmp2 a , tmp1 b WHERE a.a_value = b.a_value ; -- 조인을 이용한 업데이트 UPDATE tmp2 a SET a.b_value = b.b_value FROM tmp2 a INNER JOIN tmp1 b ON a.a_value = b.a_value ;