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 1044 게시물 읽기
No. 1044
아웅.왜이러죠.ㅠ_ㅠ
작성자
켄신
작성일
2005-01-04 15:04
조회수
4,738

테이블 A와 A의 복제테이블 B가 있습니다.

새로운 데이터는 A테이블에만 삽입되었습니다.
따라서 B테이블에 없는 A테이블의 자료를 B테이블로 Insert하려는 작업을 하려합니다.
복제가 아닙니다.
테이블 구성은 필드 a,b,c,d가 primary key 입니다. 복합키로 구성.
아래처럼 쿼리를 구성했는데 계속 duplicate key 에러가 발생합니다.
조언을 주시면 감사하겠습니다.
좋은하루 되세요
INSERT into B( a,b,c,d )
SELECT a.a, a.b, a.c, a.d
FROM A,B b
WHERE (a.a <> b.a
OR a.b <> b.b
OR a.c <> b.c
OR a.d <> b.d
)

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

변경시점에서 trigger 를 이용하시거나 등등 의 방법이 아니라

변경된 후에 insert 작업을 하시려면

 

INSERT into B( a,b,c,d )
SELECT a.a, a.b, a.c, a.d
FROM A a

where not exits ( select 1 from B b

                          where a.a = b.a and a.b = b.b and a.c = b.c and a.d = b.d )

 

로 해보심이...

 

 


 

coolrock님이 2005-01-04 19:32에 작성한 댓글입니다. Edit

or 가 아니라 and 아닌가여?

놀놀님이 2005-01-05 09:43에 작성한 댓글입니다. Edit

and로 하면 될 것 같은데... 하지만 역시 쿨록님이 하신 것처럼

차집합이 최고.. --ㅋ

kmjean님이 2005-01-05 15:56에 작성한 댓글입니다. Edit

윗글에 오타가 있군요...

not exists 입니다.

 

PK별로 조인해서 없는 데이터를 insert할거니까 당연히 or가 아니라 and죠.

not exists( and) 때문에 and를 not or로 착각할 수 있겠네요. not exists는 A - B 하는 거라고 생각하면 됩니다. 동일한 PK 레코드가 이미 존재하는지를 찾는 것이므로 PK 컬럼들을 and 조건으로 조인하는 것이 당연하겠지요.

장형운(좋은구름)님이 2005-01-27 13:21에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1047Sql 질문이요 도와 주세요 [1]
유상인
2005-01-07
4463
1046아 돌겠네요 -_-; 도움 좀 [1]
굿타임
2005-01-05
4653
1045컬럼 및 테이블 Comment 세팅(및 조회)방법? [1]
유상민
2005-01-05
6867
1044아웅.왜이러죠.ㅠ_ㅠ [4]
켄신
2005-01-04
4738
1042sybase 12.52 설치시 sybase유저에 과해 [3]
굿타임
2005-01-03
5041
1040싸이베시이스 ASE 설치후에 DSEDIT를 실행시 에러 문의 [1]
백승민
2004-12-29
4758
1039[질문] exec로 쿼리실행후 결과를 char 변수로 받는 방법. [2]
김상혁
2004-12-28
5308
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다