【问题标题】:insert Default value For a column while inserting data from other table插入默认值 对于列,同时从其他表中插入数据
【发布时间】:2017-09-13 20:13:58
【问题描述】:

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

INSERT INTO table1 SELECT * FROM table2

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

  INSERT INTO table1
     SELECT * FROM table2

我为 field1 设置了空值,以获取我设置的默认值。

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案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
    

    【讨论】:

    • 对于某些行,它为空,而对于其他行,field1 有值,所以我想要空值,它应该设置默认值。
    • 我认为您的查询会将所有记录设置为 field1 的默认值
    【解决方案2】:
    INSERT INTO table1 (field2, field3, ...)
    SELECT field2, field3, ...
    FROM table2
    

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

    【讨论】:

    • 附带说明,您应该避免在未明确列出列的情况下构建插入,因为一旦重组表,这些很容易破坏
    • 感谢您的时间和解决方案,为什么我需要简单地提及所有列名,为什么它没有通过执行“insert into table1 select * from table2. 来插入默认值。你能告诉吗?
    • 那么,数据库应该如何知道您遗漏了什么?第一列,最后一列,s.t.在中间?没有列名的插入仅在所有内容都匹配时才有效 - 如果不匹配,您需要通过列出列来指定映射。
    【解决方案3】:

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

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

    【讨论】:

    • 感谢它的工作,真的很感谢你,但是如果我已经在表级别设置了默认值,为什么这个简单的查询不起作用。
    • 由于您尝试在相应列中插入空值,当您没有在相应列中插入任何内容时,仅插入默认值。
    【解决方案4】:

    尝试使用 NVL

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

    SELECT field1, NVL(field2,'Your Default Value'), field3, ... FROM 表名2

    【解决方案5】:

    例如:

    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 ....
    

    【讨论】:

      【解决方案6】:

      任何时候你想替换一个空值,使用 COALESCE。 COALESCE 在 Oracle 和 SQL Server 中都可用,除非需要,它不会评估参数(NVL 总是评估第二个参数),并且比 case 语句更简单:

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 2013-04-22
        相关资源
        最近更新 更多