【问题标题】:Merge query in H2 db showing null not allowed errorH2 db 中的合并查询显示 null 不允许错误
【发布时间】:2013-05-05 01:39:17
【问题描述】:

H2 中的合并查询显示null is not allowed

我有一个包含 4 列的苹果表:id、type、name、status...其中 id 和 type 不能为空(ID 是主键)。

我正在使用合并命令合并“名称、状态”两列的数据...

Merge Into Apple(ID,Name,status)
key (ID)
select ID,Name,Status from Fruit ;

它给出了一个错误,显示 null is not allowed for column "type"

我不知道哪里出了问题。我在苹果表中只有一个条目,其中已经包含有效的“id”和“type”。

我的 fruits 表没有类型列,我也没有将它包含在查询中,那么为什么它显示该特定列的问题?

【问题讨论】:

    标签: database merge h2


    【解决方案1】:

    如果表包含不能为null 的列type(如您所写),那么您必须在语句中为该列提供值:

    Merge Into Apple(ID,Name,status,type)
    key (ID)
    select ID,Name,Status,0 from Fruit ;
    

    作为替代方案,您可以在创建表时指定默认值。

    【讨论】:

    • 这正是我告诉他/她的,但用户不相信这些答案
    【解决方案2】:

    Apple 期望该表的类型具有除 null 之外的某种值,而这不是由您从 Fruit 中选择的。这就是它出错的地方。我不知道 h2,但也许该语句应该看起来像: Merge Into Apple(ID,Name,status, type) key (ID) select ID,Name,Status,0 from Fruit ;

    所以每个 Apple 的 type 都只是 0。

    【讨论】:

    • 实际上合并允许我们添加特定于列的值而不会干扰其他列。现在当我添加到已经存在类型的苹果表行中时,通过提供值 0 目的将被击败.....我想将 2 列附加到来自fruit 的table apple 中,其中的值来自fruit 保持Apple 中的所有先前数据不变.....您能提出其他建议吗...
    • 怎么样:Merge Into Apple KEY(ID) select Name,Status from Fruit ;
    • 那是因为 Fruit 中的列数小于 Apple 中的列数,这就是为什么我建议为列类型提供一个默认值,例如 0,因为它期望某种值.只要你只是追加行,这个默认值真的没有问题。
    • link 我希望这将帮助您理解 h2 db 的合并查询,并且添加 0 无济于事,因为我在水果表中没有相应的列....我可以只将水果表中的那些列添加到苹果表中......指定 0 会给我一个语法错误,因为我检查了它作为预防措施......
    • 最简单的方法是给fruit添加一个类型列,这样列数就相同了。只要您不提供类型 h2 的值,就会自动为该列提供值 null ,这将继续给您错误。
    猜你喜欢
    • 2022-01-28
    • 2021-06-23
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多