У меня есть 2 таблицы - пользователи, документы. Используя RETURN, я возвращаю user_id (вновь созданный при вставке) и doc_id (вновь созданный при вставке).
Мне нужно обновить столбец в таблице, документы на основе возвращаемых значений при вставке.
Скажем, в таблице пользователей есть
user_id| user_name| user_address
1 | user1 | 1addressline1
2 | user2 | 2addressline1
таблица документов имеет
doc_id| doc_name| reference_id | user_id
1 | 1doc | | 1
2 | 2doc | | 2
Мне нужно обновить столбец reference_id значением, аналогичным doc_id (возвращается при вставке)
Doc_id и user_id создаются автоматически.
With row1 as (
insert into users(user_name,user_address)
values('user3','useraddress3')
RETURNING user_id
),row2 as (
insert into documents(doc_name,user_id)
SELECT '"+3doc+"',user_id from row1 RETURNING doc_id
)
UPDATE documents
set reference_id=doc_id
where user_id=user_id
SELECT user_id,doc_id from row1,row2;
Скажем, 3doc - это строковая переменная, содержащая имя документа.
Я не могу выполнить обновление в том же запросе.
С уважением, Нихил
SELECT '"+3doc+"'
неверный SQL. Конкатенация строк выполняется с использованием||
в SQL. Плюс у вас есть два утверждения после CTE. У вас может быть только один оператор (выбор) в качестве последнего оператора в CTE. - person a_horse_with_no_name   schedule 07.01.2015UPDATE
? Как написано выше, ваш запрос не имеет смысла, у вас естьUPDATE ... SELECT ...
там, который является поддельным синтаксис. - person Craig Ringer   schedule 07.01.2015