powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оператор INSERT
11 сообщений из 11, страница 1 из 1
оператор INSERT
    #38548818
letete
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иногда так случается (предполагаю, что не у меня одного), что нужно добавить в БД некую запись, а потом тут же ее использовать, точнее использовать ее ключ... типа пример:
Код: plaintext
1.
2.
table1      table2
 uid         uid
 name        tbl1_id
Код: sql
1.
INSERT INTO table1 DEFAULT VALUES -- у новой записи появился уникальный ключ

этот ключ (условно назовем его newID) я хочу записать в след строчке:
Код: sql
1.
INSERT INTO table2 VALUES(default, newID)



люди добрые, расскажите как делают такие вещи?
...
Рейтинг: 0 / 0
оператор INSERT
    #38548866
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT ... RETURNING это обычно делается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор INSERT
    #38548890
letete
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Код: sql
1.
2.
INSERT INTO table2(tbl1_id) 
VALUES (INSERT INTO table1 DEFAULT VALUES RETURNING uid)

отвечает мне:
Код: plaintext
1.
2.
3.
ОШИБКА:  ошибка синтаксиса (примерное положение: "INTO")
LINE 2: (INSERT INTO amsets DEFAULT VALUES RETURNING uid)
                ^
...
Рейтинг: 0 / 0
оператор INSERT
    #38548902
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
letete,

В разных СУБД это делается по-разному. А зачастую и более, чем одним способом.
Так что спрашивать имеет смысл только применительно к конкретной СУБД и конкретному способу генерации уникального ключа.
...
Рейтинг: 0 / 0
оператор INSERT
    #38548925
letete
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

речь идет о PostGreSQL. Таблицы:
Код: sql
1.
2.
CREATE TABLE table1 (uid serial PRIMARY KEY, name text DEFAULT 'no name');
CREATE TABLE table2 (uid serial PRIMARY KEY, tbl1_id integer REFERENCES table1 ON UPDATE cascade ON DELETE set null);
...
Рейтинг: 0 / 0
оператор INSERT
    #38548988
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leteteречь идет о PostGreSQL
Ну так и отправляйся в раздел PostgreSQL.
Posted via ActualForum NNTP Server 1.5

Модератор: Тема перенесена из форума "Проектирование БД".
...
Рейтинг: 0 / 0
оператор INSERT
    #38549003
letete
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иногда так случается (предполагаю, что не у меня одного), что нужно добавить в БД некую запись, а потом тут же ее использовать, точнее использовать ее ключ... типа пример:
Код: sql
1.
2.
3.
 -- создаю таблицы
CREATE TABLE table1 (uid serial PRIMARY KEY, name text DEFAULT 'no name');
CREATE TABLE table2 (uid serial PRIMARY KEY, tbl1_id integer REFERENCES table1 ON UPDATE cascade ON DELETE set null);

получается что-то вроде:
Код: plaintext
1.
2.
table1      table2
 uid         uid
 name        tbl1_id
далее процесс добавления:
Код: sql
1.
INSERT INTO table1 DEFAULT VALUES -- у новой записи появился уникальный ключ

этот ключ (условно назовем его newID) я хочу записать в след строчке:
Код: sql
1.
INSERT INTO table2 VALUES(default, newID)



люди добрые, расскажите как делают такие вещи?

как вариант пробовал:
Код: sql
1.
2.
INSERT INTO table2(tbl1_id) 
VALUES (INSERT INTO table1 DEFAULT VALUES RETURNING uid)

отвечает мне:
Код: plaintext
1.
2.
ОШИБКА:  ошибка синтаксиса (примерное положение: "INTO")
LINE 2: (INSERT INTO amsets DEFAULT VALUES RETURNING uid)
                ^
...
Рейтинг: 0 / 0
оператор INSERT
    #38549116
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
letete,

Код: sql
1.
2.
3.
with ins1(uid) as (INSERT INTO table1 DEFAULT VALUES RETURNING uid)
INSERT INTO table2(tbl1_id) 
SELECT uid FROM ins1
...
Рейтинг: 0 / 0
оператор INSERT
    #38549384
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ещё можно:
Код: sql
1.
2.
INSERT INTO table1 DEFAULT VALUES;
INSERT INTO table2(tbl1_id) VALUES (currval(pg_get_serial_sequence('table1', 'uid')))
...
Рейтинг: 0 / 0
оператор INSERT
    #38550211
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёш,

так можно только если тип сериал, а через returning - любой столбец возвратится.
...
Рейтинг: 0 / 0
оператор INSERT
    #38550722
Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ы
Гость
letete,

напр.
Код: sql
1.
2.
WITH a AS (INSERT INTO … RETURNING uid)
INSERT INTO … SELECT uid FROM a;
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оператор INSERT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]