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

請參閱上述信息,在插入WHEN NOT MATCHED THEN語句之後,我不得不提及每列,而不是輸入每一列,我可以將其替換爲其他內容。如何簡化合併到sql語句中

+2

爲什麼不,你知道什麼值被推入哪些列,所有其他的眼睛誰將盯着這個代碼 – V4Vendetta

+2

**什麼**數據庫和哪個版本? ** SQL **只是結構化查詢語言 - 許多**數據庫系統使用的語言 - ** SQL **是** NOT **數據庫產品......這類東西通常是**供應商 - 特定的** - 所以我們真的需要知道你正在使用的數據庫系統**。 –

+0

是的,我使用的是oracle 10g – Navin

回答

0

可以省略列列表INSERT但之後VALUES。該manual說:

如果省略列列表中的INSERT關鍵字後,再列的目標表的數量 必須 VALUES子句中值的數量相匹配。

什麼手動忘記提及 - 爲什麼我會建議不要省略列名 - 就是表達式的後VALUES的順序必須在表的DDL列的順序相匹配。