当我通过从table2中选择数据将数据插入table1时,我遇到了一个问题 喜欢
INSERT INTO table1
SELECT * FROM table2
因此在两个表中都有一个列,如field1,其值在表2中为null。 但是在表格中我已经设置了field1的默认值 执行后,
$champion
我为field1设置了null值,它获取了我设置的默认值。
答案 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之间有一个很大的区别,如果第二个参数有副作用,你可能会得到不同的结果。