Как облегчить слияние с SQL оператором - PullRequest
0 голосов
/ 18 августа 2011
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);

См. В приведенной выше информации: после того, как НЕ СОГЛАСОВАНО с оператором вставки, я должен упомянуть каждый столбец, вместо того, чтобы вводить каждый столбец, я могу заменить его чем-то другим.

1 Ответ

0 голосов
/ 18 августа 2011

Вы можете опустить список столбцов INSERT , но не после VALUES . руководство гласит:

Если вы опустите список столбцов после ключевого слова INSERT, тогда число столбцов в целевой таблице должно соответствовать количеству значений в предложении VALUES.

Что руководство забывает упомянуть - и почему я бы не рекомендовал опускать имена столбцов - так это то, что порядок выражений после VALUES должен соответствовать порядку столбцов в таблицеDDL.

...