Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / оператор INSERT / 11 сообщений из 11, страница 1 из 1
04.02.2014, 15:41:25
    #38548818
letete
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
Иногда так случается (предполагаю, что не у меня одного), что нужно добавить в БД некую запись, а потом тут же ее использовать, точнее использовать ее ключ... типа пример:
Код: 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
04.02.2014, 15:59:18
    #38548866
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
INSERT ... RETURNING это обычно делается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.02.2014, 16:11:08
    #38548890
letete
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
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
04.02.2014, 16:14:59
    #38548902
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
letete,

В разных СУБД это делается по-разному. А зачастую и более, чем одним способом.
Так что спрашивать имеет смысл только применительно к конкретной СУБД и конкретному способу генерации уникального ключа.
...
Рейтинг: 0 / 0
04.02.2014, 16:22:22
    #38548925
letete
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
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
04.02.2014, 16:46:24
    #38548988
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
leteteречь идет о PostGreSQL
Ну так и отправляйся в раздел PostgreSQL.
Posted via ActualForum NNTP Server 1.5

Модератор: Тема перенесена из форума "Проектирование БД".
...
Рейтинг: 0 / 0
04.02.2014, 16:52:12
    #38549003
letete
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
Иногда так случается (предполагаю, что не у меня одного), что нужно добавить в БД некую запись, а потом тут же ее использовать, точнее использовать ее ключ... типа пример:
Код: 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
04.02.2014, 17:47:49
    #38549116
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
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
04.02.2014, 20:40:15
    #38549384
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
Так ещё можно:
Код: sql
1.
2.
INSERT INTO table1 DEFAULT VALUES;
INSERT INTO table2(tbl1_id) VALUES (currval(pg_get_serial_sequence('table1', 'uid')))
...
Рейтинг: 0 / 0
05.02.2014, 13:53:39
    #38550211
Hawkmoon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор INSERT
Ёш,

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

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


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