database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 2390 게시물 읽기
No. 2390
select 하여 update할때 select문장이 null 이라면..
작성자
초짜
작성일
2009-01-07 10:00
조회수
9,196

UPDATE   INST1.TABLE1 A     
SET      A.컬럼1  =  (SELECT  B.컬럼2             
                      FROM    (SELECT   컬럼3     
                                       ,컬럼4     
                                       ,컬럼5     
                               FROM     INST1.TABLE2
                               WHERE    컬럼6 = '1'   ) B
                      WHERE   A.컬럼7     = '200809'
                      AND     A.컬럼8     = B.컬럼8      )
;  예를들어 이런문장에서

A.컬럼1 은 NOT NULL 필드입니다

(SELECT  B.컬럼2                    
 FROM    (SELECT   컬럼3            
                  ,컬럼4            
                  ,컬럼5            
          FROM     INST1.TABLE2     
          WHERE    컬럼6 = '1'   ) B
 WHERE   A.컬럼7     = '200809'     
 AND     A.컬럼8     = B.컬럼8      )  
 이부분 자체가 NULL 일때 오류가나는데...
 어떻게 처리해야하나요?
 
 COALESCE 를 SELECT전체에 적용하는건 하는건 안되고 (에러)
 COALESCE 를 B.컬럼2 에 적용하는것도 의미가 없습니다(에러)

이 글에 대한 댓글이 총 3건 있습니다.

isnull function 처리 하시면 되지 않을 까요

(SELECT  isnull(B.컬럼2 ,'xxxx')                   
 FROM    (SELECT   컬럼3            
                  ,컬럼4            
                  ,컬럼5            
          FROM     INST1.TABLE2     
          WHERE    컬럼6 = '1'   ) B
 WHERE   A.컬럼7     = '200809'     
 AND     A.컬럼8     = B.컬럼8      )   

해서 해보세요 그래도 에러나면


사이베이스 버전이?
stack trace가 발생 하나요 아니면 
Msg 233, Level 16, State 1:
Server 'ASE1502', Line 1:
The column c2 in table update_a does not allow null values. 가  발생하나요,,,
또 아니면 
Msg 409, Level 16, State 2:
Server 'RX2620', Line 1:
The ONCE AGGREGATE operation cannot take a VOID TYPE datatype as an argument.
??

top님이 2009-01-07 11:07에 작성한 댓글입니다.
이 댓글은 2009-01-07 11:21에 마지막으로 수정되었습니다. Edit

 


널값이 들어오면 안되므로 조건에서 걸러야 하지 않을까요?
그리고 

UPDATE TABLE1 A SET A.COLUMN = (SELECT COL1 FROM TABLE2 WHERE ~~ );

이런식으로 UPDATE 하시면 테이블 전체 업데이트를 시도합니다.
물론 서브퀄리에 조건이 맞지 않으면 NULL 처리 됩니다.
A.COLUMN 이 NOT NULL 속성이면 오류발생할거구요..


아래 방법을 이용하시면 어떠신지..

UPDATE   INST1.TABLE1 A
SET
    A.컬럼1 = B.컬럼2
FROM INST1.TABLE2 B
WHERE B.컬럼6 = '1'
    AND A.컬럼7 = '200809'
    AND A.컬럼8 = B.컬럼8
    AND B.컬럼2 IS NOT NULL
   
또는.

UPDATE (
    SELECT
          A.컬럼1
        , B.컬럼2
    FROM INST1.TABLE2 B
    WHERE B.컬럼6 = '1'
        AND A.컬럼7 = '200809'
        AND A.컬럼8 = B.컬럼8
        AND B.컬럼2 IS NOT NULL
) AA
SET AA.컬럼1 = AA.컬럼2

 

 
정남식(그라목손)님이 2009-01-07 13:29에 작성한 댓글입니다.
이 댓글은 2009-01-07 13:33에 마지막으로 수정되었습니다.

두분모두 감사드립니다. 도움이 많이 되었습니다.

초짜님이 2009-01-07 20:20에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2393백업 관련 질문드립니다. [2]
Kam
2009-01-08
8060
2392주어진 두 날짜 사이의 값들을 세우기 [1]
한준호
2009-01-08
9378
2391php에서 sybase 연결을 어떻게 할지 모르겠어요.. [3]
이문희
2009-01-07
10288
2390select 하여 update할때 select문장이 null 이라면.. [3]
초짜
2009-01-07
9196
2389sybase 기동이 안됩니다 [2]
초보
2009-01-07
8331
2388the optimizer was unable to construct a valid access plan
GVS
2009-01-05
8161
2387SYBASE에서 ORACLE의 DESCRIBE같은 명령있나요? [1]
권순용
2009-01-05
9217
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.028초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다