Запрос на обновление работает, как я ожидаю, в SQL Server, но не в Postgresql - PullRequest
3 голосов
/ 01 апреля 2011

У меня есть процесс ETL, который, кажется, хорошо работает в SQL Server, но я пытаюсь перенести его на Postgresql и сталкиваюсь с чем-то, чего я не понимаю.

Я создаю таблицу с именем c_production на первом этапе. Затем я хочу обновить все значения c_production.myValue на основе объединения с помощью таблицы поиска с именем previous_type_year.. В SQL Server следующий код работает нормально:

update c_production 
    set myValue =  PTY.myValue
FROM c_production CP JOIN previous_type_year PTY
    on CP.StFips = PTY.STFIPS
    AND CP.comcode = PTY.comcode
    AND CP.Year = PTY.YEAR

Однако, если я попробую это с Postgresql, я получу одно и то же значение снова и снова для myValue. Я действительно не понимаю, что он делает. Какие-нибудь подсказки, которые укажут мне, почему эти две системы обрабатывают этот запрос так по-разному?

1 Ответ

3 голосов
/ 01 апреля 2011

В PostgreSQL и SQL Server они добавили расширение к стандарту SQL, добавив предложение FROM, и оба решили реализовать его по-разному.Поэтому вам следует соблюдать осторожность при копировании обновлений от одного поставщика к другому.

См. Раздел «Обновление из нескольких источников» по ​​этой ссылке.http://www.commandprompt.com/ppbook/x7050

https://sqlserverfast.com/blog/hugo/2008/03/lets-deprecate-update-from/

В вашем случае обновите SQL для PostgreSQL, выполнив следующие действия:

UPDATE c_production 
    set myValue =  PTY.myValue
FROM previous_type_year PTY
WHERE c_production.StFips  = PTY.STFIPS
  AND c_production.comcode = PTY.comcode
  AND c_production.Year    = PTY.YEAR;

По моему личному мнению, PostgreSQL справился лучшес расширением, которое более логично, чем то, как работает SQL Server UPDATE FROM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...