2011-08-18 8 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); 

上記の情報を参照してください。挿入されたときにNOT THENステートメントが挿入された後、すべての列を入力する代わりに、すべての列を入力する代わりに別のものに置き換えることができます。SQLステートメントにマージする方法

+2

なぜ、値がどの列にプッシュされているのか知っているので、他のすべての目でこのコードを凝視するでしょう – V4Vendetta

+2

**データベース**とバージョンは何ですか? ** SQL **は単なる構造化照会言語です** **多くの**データベースシステムで使用されている言語** ** SQL **はデータベース製品ではありません**このようなものは非常に多くのベンダーです**特定の** - あなたが実際に使用している**データベースシステム**を知る必要があるので.... –

+0

ええ、私はOracle 10gを使用しています – Navin

答えて

0

を挿入することはできますが、VALUESの後には挿入できません。 manualは言う:

あなたはINSERTキーワードの後に​​列リストを省略した場合は、ターゲット表の列の数 が VALUES句で値の数と一致する必要があります。そして、なぜ私は、列名を省略することに対して推薦する - - マニュアルはもちろんのことを忘れて何

VALUES後の式の順序は、テーブルのDDLで列の順序と一致しなければならないことです。

関連する問題