2015-04-02 29 views
3

我想運行一個INSERT INTO table SELECT... FROM... 問題是我插入的表有5列,而我從中選擇的表只有4個。第5列需要被設置做一個我指定的默認值。我怎樣才能做到這一點?該查詢會是這樣的(:這是Oracle):INSERT INTO使用查詢並添加默認值

INSERT INTO five_column_table 
    SELECT * FROM four_column_table 
    --and a 5th column with a default value--; 

回答

7

只需將默認值添加到您的選擇列表中。

INSERT INTO five_column_table 
    SELECT column_a, column_b, column_c, column_d, 'Default Value' 
     FROM four_column_table; 
+0

我覺得不知道我可以做到這一點愚蠢。工作得很好。 – DanGordon 2015-04-02 19:56:28

0

只需在您的SELECT列表中選擇默認值即可。明確列出列總是一個好主意,所以我這樣做,即使它不是絕對必要的。

INSERT INTO five_column_table(col1, col2, col3, col4, col5) 
    SELECT col1, col2, col3, col4, 'Some Default' 
    FROM four_column_table 

如果你真的不想列出

INSERT INTO five_column_table 
    SELECT fct.*, 'Some Default' 
    FROM four_column_table fct 
+0

你覺得所有的列應該明確命名的原因是什麼?因此,閱讀查詢的其他人不必查看該表或其他內容? – DanGordon 2015-04-02 19:56:04

+1

@丹戈登 - 是的。同樣,如果有人使用默認值將另一列添加到表中,您的代碼不會失敗。這樣你的代碼就不依賴於表中列的順序,而這些列在不同的環境中可能會有所不同。 – 2015-04-02 20:06:14

0

Oracle支持關鍵字DEFAULT用於此目的的列:

insert all 
into five_column_table(col1, col2, col3, col4, col5) 
VALUES(col1, col2, col3, col4, DEFAULT) 
SELECT col1, col2, col3, col4 
FROM four_column_table; 

但在你的情況下,我不得不用多表插入。 DEFAULT關鍵字只能在值子句中使用。