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
운영게시판
최근게시물
Oracle Q&A 38679 게시물 읽기
No. 38679
고수님들 업데이트 쿼리 부탁드립니다.
작성자
jinkuidong(jinkuidong)
작성일
2011-07-10 22:55ⓒ
2011-07-11 01:02ⓜ
조회수
3,487

 1.다음 쿼리의 검색결과에서 DATA1 을 1로 업데이트하고 

select SS.GROUPNO, SS.CODE, SS.COND1, SS.COND2, SS.COND3, SS.DATA1
 from TB SS,
     (select T.GROUPNO from SCJIMTRECEK T
       where T.COND1 IN ('100080', '100069') and T.COND2 IN ('1', '3')
      union
      select T.GROUPNO from TB T
       where T.COND3 = '1'
      ) MM 
 where SS.GROUPNO = MM.GROUPNO
 
2.위의 검색에 해당되지 않고 AND DATA1 = 1 인 동일 GROUPNO 의 레코드의 DATA1 을 0 으로 업데이트하는 쿼리를 부탁드립니다.
 
참고 
데이터
No, GROUPNO, CODE,      COND1,  COND2, COND3, DATA1
 1, A01-01,  A01-01-01, 100080, 1,     0,     1     /* 1.의대상 */
 2, A02-01,  A02-01-01, 100080, 3,     0,     1     /* 1.의대상 */
 3, A03-01,  A03-01-01, 100069, 1,     0,     1     /* 1.의대상 */
 4, A04-01,  A04-01-01, 100069, 3,     0,     1     /* 1.의대상 */
 5, A05-01,  A05-01-01, 111111, 1,     1,     1     /* 1.의대상 */
 6, A06-01,  A06-01-01, 111111, 1,     0,     1     /* 2.의대상 */
 7, A07-01,  A07-01-01, 100080, 2,     1,     1     /* 1.의대상 */
 8, A08-01,  A08-01-01, 100080, 2,     0,     1     /* 2.의대상 */
 9, A09-01,  A09-01-01, 100080, 2,     0,     2     /*  */
10, B10-01,  B10-01-01, 100080, 1,     0,     1     /* 1.의대상 */
11, B10-01,  B10-01-02, 100080, 1,     0,     2     /* 1.의대상 */
12, B12-01,  B12-01-01, 100080, 3,     0,     1     /* 1.의대상 */
13, B12-01,  B12-01-02, 100090, 3,     0,     2     /* 1.의대상 */
14, B14-01,  B14-01-01, 100069, 1,     0,     1     /* 1.의대상 */
15, B14-01,  B14-01-02, 100090, 1,     0,     2     /* 1.의대상 */
16, B16-01,  B16-01-01, 100069, 3,     0,     1     /* 1.의대상 */
17, B16-01,  B16-01-02, 100090, 3,     0,     2     /* 1.의대상 */
18, B18-01,  B18-01-01, 111111, 1,     1,     1     /* 1.의대상 */
19, B18-01,  B18-01-02, 111111, 3,     0,     2     /* 1.의대상 */
20, B20-01,  B20-01-01, 111111, 1,     0,     1     /* 2.의대상 */
21, B20-01,  B20-01-02, 111111, 3,     0,     1     /* 2.의대상 */
22, B22-01,  B22-01-01, 111111, 1,     0,     1     /* 2.의대상 */
23, B22-01,  B22-01-02, 111111, 3,     0,     2     /* 2.의대상 */
24, B24-01,  B24-01-01, 100080, 2,     1,     2     /* 1.의대상 */
25, B24-01,  B24-01-02, 100080, 2,     0,     2     /* 1.의대상 */
26, B26-01,  B26-01-01, 100069, 1,     0,     1     /* 1.의대상 */
27, B26-01,  B26-01-02, 100069, 2,     0,     1     /* 1.의대상 */
28, B28-01,  B28-01-01, 111111, 2,     0,     1     /* 2.의대상 */
29, B28-01,  B28-01-02, 111111, 2,     0,     2     /* 2.의대상 */
30, B30-01,  B30-01-01, 111111, 2,     0,     2     /*  */
31, B30-01,  B30-01-02, 111111, 2,     0,     2     /*  */
 
쿼리 한번으로 가능하신지요.
그리고 인덱스를 어떻게 타는지도 부탁드립니다.
 
 
 
이 글에 대한 댓글이 총 1건 있습니다.

MERGE INTO tb a
USING
(
/* 1번 조건 만족하는 자료가 포함된 그룹 */
SELECT DISTINCT groupno, '1' data2
  FROM tb
 WHERE (cond1 IN ('100080','100069') AND cond2 IN ('1','3'))
    OR (cond3 = '1')
 UNION ALL
/* 1번 조건 만족하는 자료가 포함되지 않은 그룹 중 data1 = 1 을 포함하는 그룹 */
SELECT groupno, '0' data2
  FROM tb
 WHERE data1 = '1'
 MINUS
SELECT groupno, '0' data2
  FROM tb
 WHERE (cond1 IN ('100080','100069') AND cond2 IN ('1','3'))
    OR (cond3 = '1')
) b
ON (a.groupno = b.groupno)
WHEN MATCHED THEN
UPDATE SET data1 = b.data2
;

마농(manon94)님이 2011-07-11 16:47에 작성한 댓글입니다.
이 댓글은 2011-07-11 16:48에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
38682chmod 775로 하면 안되는게 정상인가요? [2]
임서희
2011-07-11
3419
38681STREAMS_POOL_SIZE? 의 역활은?
for2
2011-07-11
3003
38680쿼리질문 있읍니다. [3]
쿼리질문
2011-07-11
3621
38679고수님들 업데이트 쿼리 부탁드립니다. [1]
jinkuidong
2011-07-10
3487
386789와 11에서 구문 에러 차이 발생 [1]
gugizi
2011-07-10
3490
38675오라클 접속지연
초보DB
2011-07-08
4368
38674쿼리질문이요~ [2]
busters
2011-07-08
3122
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다