2011-08-18 2 views
0
SQL> SELECT * FROM dept; 

DEPTNO DNAME   LOC 
    10 ACCOUNTING  NEW YORK 
    20 RESEARCH  DALLAS 
    30 SALES   CHICAGO 
    60 HELP DESK  PITTSBURGH 
    40 OPERATIONS  BOSTON 

SQL> SELECT * FROM dept_online; 

DEPTNO DNAME   LOC 
    40 OPERATIONS  BOSTON 
    20 RESEARCH DEV DALLAS 
    50 ENGINEERING WEXFORD 


SQL> MERGE INTO dept d 
USING (SELECT deptno, dname, loc 
     FROM dept_online) o 
ON (d.deptno = o.deptno) 
WHEN MATCHED THEN 
    UPDATE SET d.dname = o.dname, d.loc = o.loc 
WHEN NOT MATCHED THEN 
    INSERT (d.deptno, d.dname, d.loc) 
    VALUES (o.deptno, o.dname, o.loc); 

위의 정보를 참조하십시오. INSERT 할 때마다 INSEN 문에 삽입해야합니다. 모든 열을 입력해야합니다. 대신 모든 열을 입력하면됩니다.SQL 문으로 쉽게 병합

+2

왜 값이 어떤 열로 푸시되는지 알고 있으므로 다른 모든 사람들이이 코드를 쳐다볼 것입니다 – V4Vendetta

+2

** 데이터베이스 ** 및 버전은 무엇입니까 ?? ** SQL **은 ** 많은 ** 데이터베이스 시스템에서 사용되는 언어 인 구조화 된 쿼리 언어 일뿐입니다 ** ** SQL **은 ** 데이터베이스 제품이 아닙니다 ** 이와 같은 것들은 매우 자주 ** 벤더입니다 특정 ** - 그래서 우리는 ** 당신이 사용하고있는 ** 데이터베이스 시스템 **을 정말로 알아야합니다 .... –

+0

그래, 나는 오라클 10g를 사용하고 있습니다. – Navin

답변

0

삽입은 생략 할 수 있지만 VALUES 이후는 생략 할 수 없습니다. manual는 말한다 :

그런 다음 대상 테이블의 열 수 는 VALUES 절에서 값의 수와 일치해야합니다, 삽입 키워드 다음에 열 목록을 생략합니다. 왜 내가 열 이름을 생략에 대해 추천 할 것입니다 - - 수동 언급하고 잊어 무엇

VALUES 후 표현의 순서가 테이블의 DDL의 열 순서와 일치해야한다는 것입니다.

관련 문제