insert默认值对于从其他表插入数据时的列

时间:2017-04-18 05:51:16

标签: sql oracle oracle11g

当我通过从table2中选择数据将数据插入table1时,我遇到了一个问题 喜欢

INSERT INTO table1 SELECT * FROM table2

因此在两个表中都有一个列,如field1,其值在表2中为null。 但是在表格中我已经设置了field1的默认值 执行后,

$champion

我为field1设置了null值,它获取了我设置的默认值。

6 个答案:

答案 0 :(得分:1)

您可以指定列名称,然后在选择声明

中设置值
INSERT INTO table1 (field1, field2, field3, ...)
SELECT field1, 
       CASE WHEN field2 IS NOT NULL THEN field2
            ELSE 'Your_default_value' END , 
       field3, ...
FROM table2

答案 1 :(得分:0)

On branch staging
Your branch is up-to-date with 'origin/staging'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
(commit or discard the untracked or modified content in submodules)

modified:   sites/all/vendor/imgix/imgix-php (modified content)

no changes added to commit (use "git add" and/or "git commit -a")

您只需跳过默认值oyu想要使用的列,它将默认自动填充。

答案 2 :(得分:0)

有趣的是,实现此目的的一种方法是使用CASE EXPRESSION,假设field2是您想要放置默认值的列

INSERT INTO TableName1 (field1, field2, field3, ...)
SELECT field1, CASE WHEN field2 IS NULL THEN 'DefaultValue' ELSE field2 END, field3, ...
FROM TableName2

答案 3 :(得分:0)

尝试使用NVL

INSERT INTO TableName1(field1,field2,field3,...)

SELECT field1, NVL(field2,'您的默认值'),field3,... 来自TableName2

答案 4 :(得分:0)

例如:

INSERT INTO DESTINATION_TABLE(A, B, C, D, E, F)
   SELECT W, X, Y, 'Some custom value', CASE WHEN Z IS NULL THEN 'Some other value' ELSE Z
FROM SOURCE_TABLE
WHERE ....

答案 5 :(得分:0)

每当您想要替换空值时,请使用COALESCE。 COALESCE在Oracle和SQL Server中均可用,除非需要,否则它不会评估参数(NVL总是计算第二个参数),并且它比case语句更简单:

Insert into table1(field1, field2)
  select field1, coalesce(field2, field3, field4, 'novalue') from table2;

NVL和COALESCE之间有一个很大的区别,如果第二个参数有副作用,你可能会得到不同的结果。