update 문의 0 6 1,302

by BadGod [SQL Query] [2016.09.21 18:41:08]


  INPUT_TBL   JUSO_TBL
아이디 JUSO_ID   JUSO_ID
CITY ---> CITY
GU ---> GU
DONG ---> DONG
번지 BUNJI ---> BUNJI
전체     ALL

 

질문) 위와 같이 테이블 두개가 있습니다.

       주소테이블과 인풋테이블의 아이디가 같으면(주소테이블에 juso_id가 없으면 종료)
       인풋테이블의 각 컬럽데이타를 주소테이블의 각 컬럽으로 update후
       주소테이블의 각 컬럽을 모두 주소테이블의 "ALL"에 update하기 입니다.
       아래 두 코드는 제가 만들어 본것인데요. 하나의 쿼리로 가능할까요?
       그리고 아래 첫 코드는 2,3 행에서 에러가 발생하네요.
    
1    UPDATE juso_tbl c
2        SET c.city = input_tbl.city c.gu = input_tbl.gu c.dong = input_tbl.dong c.bunji = input_tbl.bunji 
3     WHERE c.juso_id = input_tbl.juso_id
4    ;
    
1    UPDATE juso_tbl c
2       SET c.all = c.city || ' ' || c.gu || ' ' || c.dong || ' ' || c.bunji
3     WHERE juso_tbl.joso_id = input_tbl.juso_id
4    ;

 

by 도미노 같은 놈 [2016.09.21 19:09:23]

2번째 업데이트 문은

where 조건에 input_tbl.juso_id 이게 문제 일듯 싶은데요 

WHERE c.joso_id in (select juso_id from input_tbl)

이런식으로 해결 되지 않나요?? 


by 도미노 같은 놈 [2016.09.21 19:14:33]

1번째꺼는 merge 문 사용하시면 편하실 거 같은데;

 

MERGE INTO juso_tbl juso_tbl c
USING (SELECT * FROM input_tbl) input_tbl
ON (c.juso_id = input_tbl.juso_id) 
WHEN MATCHED THEN 
UPDATE 
SET c.city = input_tbl.city, c.gu = input_tbl.gu, c.dong = input_tbl.dong, c.bunji = input_tbl.bunji, c.all = c.city || ' ' || c.gu || ' ' || c.dong || ' ' || c.bunji;

대충 이런식?

 

저도 지식이 짧아서;;


by jkson [2016.09.22 07:59:31]
UPDATE JUSO_TBL C
   SET (CITY,GU,DONG,BUNJI,ALL) =
          (SELECT CITY
                , GU
                , DONG
                , BUNJI
                , CITY || ' ' || GU || ' ' || DONG || ' ' || BUNJI
             FROM INPUT_TBL A
            WHERE A.JUSO_ID = C.JUSO_ID)
 WHERE EXISTS (SELECT 1
                 FROM INPUT_TBL B
                WHERE B.JUSO_ID = C.JUSO_ID)

 


by BadGod [2016.09.22 09:26:45]

먼저, 두 고수님께 감사드립니다.

질문 내용을 다시 수정했는데 봐주시겠어요?

  INPUT_TBL   JUSO_TBL
아이디 JUSO_ID   JUSO_ID
CITY ---> CITY
GU ---> GU
DONG ---> DONG
번지 BUNJI ---> BUNJI
기타     GITA
전체     ALL

 

질문) 위와 같이 테이블 두개가 있습니다.            
       주소테이블과 인풋테이블의 아이디가 같으면(주소테이블에 juso_id가 없는것은 UPDATE없음)            
       인풋테이블의 각 컬럼데이타를 주소테이블의 각 컬럼으로 update후            
       주소테이블의 CITY, GU, DONG, BUNJI, GITA 컬럼데이타를 주소테이블의 "ALL"에 update하기 입니다.            
       아래 두 코드는 제가 만들어 본것인데요. 하나의 쿼리로 가능할까요?         
            
1    UPDATE juso_tbl c        
2        SET c.city = input_tbl.city c.gu = input_tbl.gu c.dong = input_tbl.dong c.bunji = input_tbl.bunji         
3     WHERE c.juso_id = input_tbl.juso_id        
4    ;        
            
1    UPDATE juso_tbl c        
2       SET c.all = c.city || ' ' || c.gu || ' ' || c.dong || ' ' || c.bunji || ' ' || gita        
3     WHERE juso_tbl.joso_id = input_tbl.juso_id        
4    ;        


by jkson [2016.09.22 12:05:28]
UPDATE JUSO_TBL C
   SET (CITY,GU,DONG,BUNJI,ALL) =
          (SELECT CITY
                , GU
                , DONG
                , BUNJI
                , CITY || ' ' || GU || ' ' || DONG || ' ' || BUNJI || ' ' || C.GITA
             FROM INPUT_TBL A
            WHERE A.JUSO_ID = C.JUSO_ID)
 WHERE EXISTS (SELECT 1
                 FROM INPUT_TBL B
                WHERE B.JUSO_ID = C.JUSO_ID)

 


by BadGod [2016.09.22 11:55:34]

도미노 같은 놈님, jkson님

두분 모두께 감사합니다.

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