Вставьте значение, ссылающееся на другое поле - PullRequest
0 голосов
/ 31 мая 2019

После создания таблицы, подобной этой:

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)

Я мог сделать только то, что напоминает это:введение последовательности, есть ли более простой способ?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Если значение C2 не будет изменено, вы можете объявить его как столбец GENERATED.

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

Вставки выполняются со значениями ПО УМОЛЧАНИЮ.

INSERT INTO T1 VALUES DEFAULT, DEFAULT
0 голосов
/ 31 мая 2019

У меня нет решения для этого, поскольку во время вставки автоматически сгенерированное значение может быть еще недоступно.Но одним из обходных путей на уровне данных, который вы можете использовать, может быть просто вставить NULL значения в C2 всякий раз, когда вы хотите, чтобы они просто отражали значение в C1.То есть используйте эту вставку для следующих случаев:

INSERT INTO T1 (C2)
VALUES (NULL);

Затем при выборе используйте COALESCE, чтобы сообщить значение C1 для C2:

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