Sql 插入其他表中的数据时插入列的默认值
当我通过从表2中选择数据将数据插入表1时,我面临一个问题 像Sql 插入其他表中的数据时插入列的默认值,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,当我通过从表2中选择数据将数据插入表1时,我面临一个问题 像 插入到表1中 从表2中选择* 所以在这两个表中都有一列,如field1,其值在表2中为null。 但在表中,我为field1设置了默认值 执行后, INSERT INTO table1 SELECT * FROM table2 字段1的值为空,而不是我设置的默认值。您可以指定列名,然后在Select语句中设置值 INSERT INTO table1 (field1, field2, field3, ...) SELEC
插入到表1中
从表2中选择*
所以在这两个表中都有一列,如field1,其值在表2中为null。
但在表中,我为field1设置了默认值
执行后,
INSERT INTO table1
SELECT * FROM table2
字段1的值为空,而不是我设置的默认值。您可以指定列名,然后在Select语句中设置值
INSERT INTO table1 (field1, field2, field3, ...)
SELECT field1,
CASE WHEN field2 IS NOT NULL THEN field2
ELSE 'Your_default_value' END ,
field3, ...
FROM table2
您只需跳过您想要使用默认值的列,它将自动填充默认值。有趣的是,实现这一点的一种方法是使用大小写表达式,假设
field2
是您想要放置默认值的列
INSERT INTO TableName1 (field1, field2, field3, ...)
SELECT field1, CASE WHEN field2 IS NULL THEN 'DefaultValue' ELSE field2 END, field3, ...
FROM TableName2
尝试使用NVL 插入表名1(字段1、字段2、字段3等) 选择字段1,NVL(字段2,'您的默认值'),字段3。。。 例如,从TableName2开始:
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 ....
任何时候要替换空值,请使用COALESCE。COALESCE在Oracle和SQL Server中都可用,除非需要,否则它不会计算参数(NVL总是计算第二个参数),并且它比case语句更简单:
Insert into table1(field1, field2)
select field1, coalesce(field2, field3, field4, 'novalue') from table2;
NVL和COALESCE之间的一大区别是,如果第二个参数有副作用,您可能会得到不同的结果。对于某些行,它是空的,而对于其他行,它是字段1的值,因此我想对于空值,它应该设置默认值。我认为您的查询将使用字段1的默认值设置所有记录。作为一个补充,您应该避免在不明确列出列的情况下构建插入,因为这样做很容易表重新构造后中断感谢您的时间和解决方案,为什么我需要提及所有列名?为什么它不通过执行“插入到表1中,从表2中选择*。你知道吗?数据库怎么知道你漏掉了什么?第一列,最后一列,中间的S.T?只有当所有内容都匹配时,不带列名的insert才有效-如果不匹配,您需要通过列出列来指定映射。感谢它的工作,真的感谢您,但是如果我已经在表级别设置了默认值,为什么简单查询不起作用。因为您正在尝试在相应的列中插入null值,当您不在相应列中插入任何内容时,只会插入默认值。
Insert into table1(field1, field2)
select field1, coalesce(field2, field3, field4, 'novalue') from table2;