Как динамически вставить значение COLUMN? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть таблица типа Table1 с несколькими записями в ней. Я пытаюсь вставить записи в Таблицу 2 с помощью этого запроса INSERT INTO Table2 VALUES (1, 'Orange', (SELECT ID FROM Table1)); Я хотел бы вставлять идентификатор из Таблицы 1 один за другим в Таблицу 2, в которой все остальные значения статичны.

**Table1**

ID     Name     
1      Round
2      Edible
3      Blue
4      Seeds

**Table2**

ID     Name     Table1ID
1      Orange      1
2      Orange      2
3      Orange      4

Ответы [ 2 ]

3 голосов
/ 01 ноября 2019

Я хотел бы вставить идентификатор из таблицы 1 один за другим в таблицу 2, в которой все остальные значения были бы статическими.

Использовать статические значения как часть запроса SELECTс Table1

INSERT INTO Table2 
SELECT 1, 'Orange', ID FROM Table1

Это работает, пока столбцы совпадают. Иногда столбцы не совсем одинаковы, и у вас не будет значений для всего в Table2. В этом случае вы все равно можете указать список столбцов;трюк не использует ключевое слово VALUES.

INSERT INTO Table2 
    (ID, Table1ID)
SELECT 0, ID FROM Table1

Теперь поле Name в Table2 будет заканчиваться NULL в каждой новой строке.

НаконецВозможно, вы захотите создать последовательные значения идентификатора «1,2,3» из данных примера. Есть два способа сделать это.

Первый способ - если это поле является полем identity в Table2. В этом случае вообще ничего не используйте для нового столбца ID:

INSERT INTO Table2 
    (Name, Table1ID)
SELECT 'Orange', ID FROM Table1

Другой вариант - использование функции row_number():

INSERT INTO Table2 
SELECT row_number() over (ORDER BY ID), 'Orange', ID FROM Table1
1 голос
/ 01 ноября 2019

Вы рядом. Вы не можете объединить VALUES и SELECT в своем INSERT, вам нужно выбрать одно или другое. В этом случае:

INSERT INTO Table2 SELECT 'Two', 0, NULL, ID FROM Table1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...