동상이몽
1k
2012-04-23 18:00:26
9
56956

insert into 처럼 update를 다중으로 하는 방법 알려주세요.


insert into ??
select ???
해서 여러개를 insert 하듯이

update를 다중으로 하려면 어떻게 해야하나요?

update school a
set a.id = b.id
, a.name = b.name
where a.no in (select no from school2 b)

이런식으로는 안되나요
0
0
  • 답변 9

  • joker2501
    1k
    2012-04-23 18:13:17
    update school a
    set a.id = (select b.id from school2 b)
    , a.name = (select b.name from school2 b)
    where a.no in (select no from school2 b)

    이런거요?
    0
  • impish78
    1k
    2012-04-24 00:14:58
    오.. 그거되요? 좋네요..
    0
  • sabeu
    1k
    2012-04-24 00:45:03
    update school a
    set (id, name) = (select id, name from school2 b where a.no = b.no);

    요것도 가능할거 같습니다..대량은 다른방법을..
    0
  • 레버리지
    2k
    2012-04-24 09:48:15
    UPDATE /*+ bypass_ujvc */
    (
    SELECT A.ID ID1
    , B.ID ID2
    , A.NAME NAME1
    , B.NAME NAME2
    WHERE A.NO = B.NO
    ) SET ID1 = ID2
    , NAME1 = NAME2
    0
  • 레버리지
    2k
    2012-04-24 11:36:57
    where 절 앞에 from 이 빠졌습니다. 넣어주세요...
    0
  • larcyuki
    1k
    2012-04-24 18:17:16
    죄송하지만 태클 걸자면 synopsis님 글 대로 하시면 전체 데이터가 업데이트 됩니다.
    WHERE 조건이 있어야죠.
    가장 좋은 방법은 연아아빠님이 하신 대로 수정 가능 뷰로 생성하는 게 좋다고 봅니다 ``;
    0
  • sabeu
    1k
    2012-04-25 14:53:52
    네 맹호군님 말씀이 맞습니다.
    위에 칼퇴근지향근로자님이 적으신 WHERE절 가져다 쓰셔야 합니다.
    컬럼이 두개뿐이지만 많을경우 SELECT절 한번만 쓸수도 있다는걸 보여주려다
    정작 중요한 WHERE절을 빼먹었네요..이러면 큰일나는겁니다 ㅋㅋ
    0
  • sabeu
    1k
    2012-04-25 14:57:16
    근데 혹시
    /*+ bypass_ujvc */ 써서 UPDATE 다중처리하는건
    알고는 있었는데요 표준이 아니라구 하던데..
    듣기로는 데이타 정확성을 보장받을수 없다라는 말을 들은적이 있어요~
    11g부터는 지원도 안된다고 하고요..
    아무문제 없이 잘 쓰이고 있는 방식인가요?
    0
  • 레버리지
    2k
    2012-04-25 17:57:53
    오라클에서 메뉴얼에 있지 않은(공식적이지 않은) 힌트 입니다.

    11g 부턴 Error 가 발생하니 Merge 구문으로 처리하는 것도 한 방법이죠
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.