В основном, я хочу сделать это:
update vehicles_vehicle v
join shipments_shipment s on v.shipment_id=s.id
set v.price=s.price_per_vehicle;
Я почти уверен, что это будет работать в MySQL (мой опыт), но, похоже, это не работает в postgres. Я получаю ошибку:
ERROR: syntax error at or near "join"
LINE 1: update vehicles_vehicle v join shipments_shipment s on v.shi...
^
Конечно, есть простой способ сделать это, но я не могу найти правильный синтаксис. Итак, как бы я написал это в PostgreSQL?
postgresql
syntax
mpen
источник
источник
vehicles_*
таблицы и несколькоshipments_*
таблиц.Ответы:
Синтаксис UPDATE является:
В вашем случае я думаю, что вы хотите этого:
источник
Позвольте мне объяснить немного больше на моем примере.
Задача: исправить информацию, когда абитуриенты (учащиеся, которые собираются покинуть среднюю школу) подали заявки в университет раньше, чем получили школьные сертификаты (да, они получили сертификаты раньше, чем были выданы (к указанной дате сертификата). Итак, мы будем увеличить дату подачи заявки, чтобы она соответствовала дате выдачи сертификата.
Таким образом. следующее MySQL-подобное утверждение:
Таким образом, становится PostgreSQL-подобным
Как вы можете видеть, оригинальный подзапрос
JOIN
«sON
положение стало одним изWHERE
условий, которое conjucted путемAND
с другими, которые были перемещены из подзапроса без каких - либо изменений. И больше нет необходимостиJOIN
объединяться с самим собой (как это было в подзапросе).источник
JOIN
как обычно вFROM
списке:FROM abiturients b JOIN addresses c ON c.abiturient_id = b.id
from_list
(которое является расширением PostgreSQL для SQL). Кроме того, см. Примечания о присоединении к таблицам предостережения по предоставленной вами ссылке.Ответ Марка Байерса является оптимальным в этой ситуации. Хотя в более сложных ситуациях вы можете взять запрос select, который возвращает значения rowid и вычисленные значения, и прикрепить его к запросу на обновление следующим образом:
Этот подход позволяет вам разработать и протестировать ваш запрос на выборку и в два шага преобразовать его в запрос на обновление.
Так что в вашем случае результат запроса будет:
Обратите внимание, что псевдонимы столбцов являются обязательными, иначе PostgreSQL будет жаловаться на неоднозначность имен столбцов.
источник
Для тех, кто действительно хочет сделать,
JOIN
вы также можете использовать:При необходимости вы можете использовать a_alias в
SET
разделе справа от знака равенства. Поля слева от знака равенства не требуют ссылки на таблицу, так как они считаются исходной таблицей «а».источник
Для тех, кто хочет создать JOIN, который обновляет ТОЛЬКО те строки, которые использует ваше соединение:
Это было упомянуто выше, но только через комментарий. Так как важно получить правильный результат, публикуя НОВЫЙ ответ, который работает
источник
Вот так:
Просто, как я мог сделать это. Спасибо, парни!
Можно также сделать это:Но затем у вас есть таблица транспортных средств там дважды, и вам разрешено использовать ее псевдоним только один раз, и вы не можете использовать псевдоним в части «set».источник
join
сдерживает?Вот простой SQL, который обновляет Mid_Name в таблице Name3, используя поле Middle_Name из Name:
источник
Ссылка ниже содержит пример, который решает и помогает лучше понять, как использовать
update
иjoin
с postgres.Смотрите: http://www.postgresqltutorial.com/postgresql-update-join/
источник
Имя первой таблицы: tbl_table1 (tab1). Имя второй таблицы: tbl_table2 (tab2).
Установите для столбца ac_status таблицы tbl_table1 значение «НЕАКТИВНО»
источник