среда, 16 января 2013 г.

Update в PostghreSQL, перенос данных из одной таблицы в другую

Глупейшая ситуация возникла, однако.
Потратил не менее 30 минут на написание вот такого простого запроса.

UPDATE invoices SET contractorname = c.name from contractors c where invoices.contractorid = c.id

Дело в том, что мне потребовалось перенести ИМЯ Клиента из таблицы Клиентов в поле находящееся в таблице Счетов.
В таблице Счетов id клиента уже был.
Чтобы такого не повторилось, и я в случае чего быстренько вспомнил, распишу все подробно, так как с SQL сталкиваюсь редко и стараюсь писать запросы как можно более простые и понятные.

UPDATE invoices
-- будем апдейтить эту таблицу Счетов 'invoices'.
SET contractorname = c.name from contractors c
-- будем апдейтить поле 'contractorname' с именем клиента в таблице Счетов
-- = апдейтить его будем данными из поля 'с.name' в таблице Клиенты 'contractors '
WHERE invoices.contractorid = c.id
-- ну и условие, по которому у нас будут сравниваться поля в одной и в другой таблице.

Сначала я по какой-то непонятной мне старой привычке хотел написать следующее:
UPDATE invoices, contractors  SET invoices.contractorname = contractors.name WHERE invoices.contractorid = contractors.id
Но это не прокатывает в PostgreSQL.

В общем гуггл руллит :)