【问题标题】:Insert value referencing another field插入引用另一个字段的值
【发布时间】:2019-05-31 10:12:16
【问题描述】:

创建这样的表后:

CREATE TABLE T1 (
    C1 INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
    C2 INTEGER);

我想在 C2 中插入与 C1 相同的值:

INSERT INTO T1(C1, C2) VALUES (DEFAULT, C1)

我只能通过引入一个序列来做类似的事情,有没有更直接的方法?

【问题讨论】:

    标签: hsqldb


    【解决方案1】:

    如果 C2 值不会改变,可以将其声明为 GENERATED 列。

    CREATE TABLE T1 (
    C1 INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
    C2 INTEGER GENERATED ALWAYS AS (C1));
    

    使用 DEFAULT 值完成插入。

    INSERT INTO T1 VALUES DEFAULT, DEFAULT
    

    【讨论】:

      【解决方案2】:

      我对此没有解决方案,因为在插入发生时,自动生成的值甚至可能还不可用。但是,您可以在数据层使用的一种解决方法是,只要您希望它们仅反映C1 中的值,就将NULL 值插入C2。也就是说,在这些情况下使用此插入:

      INSERT INTO T1 (C2)
      VALUES (NULL);
      

      然后,当您选择时,使用COALESCE 报告C2C1 值:

      SELECT C1, COALESCE(C2, C1) AS C2
      FROM T1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 2017-03-21
        • 2015-01-17
        • 1970-01-01
        • 2020-09-03
        相关资源
        最近更新 更多