(해결) SQLite 에서는 되는데 Sybase에서는 제대로 된 값이 들어가질 않습니다. 0 8 860

by 이승주 [2016.09.01 17:18:42]


아래와 같은 값을 가지고 있는 테이블 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 방식으로 만들어서 자료형을 제대로 명시해주니까 해결됬습니다. 감사합니다. ^^

by 러드 [2016.09.01 17:54:09]
UPDATE TMP2
SET B_VALUE = (SELECT B_VALUE
FROM TMP1
WHERE A_VALUE = TMP2.A_VALUE)
WHERE EXISTS ( SELECT 1
FROM TMP1
WHERE A_VALUE =TMP2.A_VALUE)

전 이런식으로 많이 사용해서요

by 이승주 [2016.09.01 18:15:02]

실행은 되는데.. 역시 같은 문제가 발생합니다 ㅠㅠ

SQLite는 되는데 Sybase는 안되네요..

 

 


by 러드 [2016.09.02 05:19:49]
UPDATE
(
SELECT a.B_VALUE as xx , b.b_value
FROM TMP1 a , TMP2 b
WHERE A_VALUE = TMP2.A_VALUE
)
Set b_value = xx

전에 Sybase도 이리 실행한것으로 기억이 나는데 테스트가 불가능하네요^^;;;

by 이승주 [2016.09.02 12:13:00]

문법 오류로 UPDATE가 안되네요..ㅠㅠ

아래 SELECT 문이 실행은 되는데 여전이 1,1,1로 나옵니다..ㅠㅠ


by 마농 [2016.09.02 09:21:40]
-- 우선 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
;

 


by 이승주 [2016.09.02 12:12:35]

계속 1,1,1로 나옵니다..

문제가 뭘까요? 자료형이 잘못된걸까요?

원인을 모르겠습니다 ㅠㅠ


by 마농 [2016.09.02 13:10:16]

Select 만 해도 1 이 나온다는 건가요?

그렇다면 Update 는 문제 없다는 거네요.

Select 가 왜 1 이 나오는지를 파악해야 하겠네요.


by 이승주 [2016.09.02 13:37:30]

아 저게 create temporary local table select 방식으로 만든 임시테이블이었는데  만들지 말고 declare local temporary table 방식으로 만들어서 자료형을 제대로 명시해주니까 해결됬습니다. 감사합니다. ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입