이런경우 머지 로 가능할지 궁금합니다 0 2 845

by 쿼리초보 [2022.07.15 17:52:44]


이런경우 머지 로 가능할지 궁금합니다

 

 

tableA데이터 (id 와 no 와 goodsId가 pk 입니다)

id       no      goodsId .... 

1        mxx     0001

1        mxx     0002

1         x          0001

1         x          0002

 

update tableA set 

        no = 'mxx'

where id = '1'

   and no = 'x'

 

이렇게 업데이트 하면 당연히 

키 중복 에러가 납니다

 

이 구문을 머지 로 할수 있을까요

뭐 한개씩 꺼내면서 루프 돌리면 당연히 되겠지만 좀더 좋은 방법이 있을거 같아서요

 

예를들어 머지문처럼...

해당키가 검색되면  

1 x 0001

1 x 0002

 

위 두데이터는 삭제하고 검색한되면 

update tableA set 

        no = 'mxx'

where id = '1'

   and no = 'x'

 

구문을 실행 하여.. 업데이트를 수행하고 싶은데...

 

머지문으로 이런경우도 가능할까요? (해보고 있는데 잘안되네요 ㅠㅠ)

조언 부탁드립니다. 

 

 

 

 

 

 

 

 

by 마농 [2022.07.18 09:25:00]
CREATE TABLE test6
AS
SELECT 1 id, 'mxx' no, '0001' goodsId, 1 c1, 2 c2 FROM dual
UNION ALL SELECT 1, 'mxx', '0002', 2, 3 FROM dual
UNION ALL SELECT 1, 'x'  , '0001', 3, 4 FROM dual
UNION ALL SELECT 1, 'x'  , '0002', 4, 5 FROM dual
UNION ALL SELECT 1, 'z'  , '0001', 5, 6 FROM dual
UNION ALL SELECT 1, 'z'  , '0002', 6, 7 FROM dual
;

ALTER TABLE test6 ADD CONSTRAINT pk_test6 PRIMARY KEY(id, no, goodsid);

SELECT * FROM test6;

MERGE INTO
      (SELECT id, no, goodsid
         FROM test6
        WHERE id = 1
          AND no IN ('x', 'mxx')
       ) a
USING (SELECT id, no, goodsid
         FROM test6
        WHERE id = 1
          AND no = 'x'
       ) b
ON (a.id = b.id AND a.goodsid = b.goodsid)
WHEN MATCHED THEN
UPDATE
   SET a.no = DECODE(a.no, 'x', 'mxx', 'del')
DELETE
 WHERE no = 'del'
;

 


by 쿼리초보 [2022.07.19 11:04:50]

마농님 매번 너무 감사드립니다 이렇게 또 하나 배워가네요 ㅠㅠ 잘해결했습니다.. 위방법으로..

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