【问题标题】:postgres 9.0.13 update values from (select values from)postgres 9.0.13 update values from (select values from)
【发布时间】:2017-04-06 08:26:27
【问题描述】:

基于文档https://www.postgresql.org/docs/9.1/static/sql-update.html 我正在尝试做的事情是不可能的(在该页面的最底部)

=================

UPDATE accounts SET (contact_last_name, contact_first_name) =
    (SELECT last_name, first_name FROM salesmen
     WHERE salesmen.id = accounts.sales_id);

=================

有没有其他方法可以做到这一点?

    db=> update "Template" set ("MsgCategoryName","FromAddress","FromName","ToAddress","ToName","BccAddress","EmailSubject","EmailHTML","EmailPlanText") = (Select "MsgCategoryName","FromAddress","FromName","ToAddress","ToName","BccAddress","EmailSubject","EmailHTML","EmailPlanText" from "Template" where "AccountID" = 1016020479 and "LocaleID" = 'nl' and "TmplName" = 'Invoice/Nobrand/PDF') where "AccountID" = 1017069459 and "TmplName" = 'Invoice/Nobrand/PDF' and "LocaleID" = 'nl';
ERROR:  syntax error at or near "Select"
LINE 1: ...s","EmailSubject","EmailHTML","EmailPlanText") = (Select "Ms...

db=> select version();
                                                      version                                                      
-------------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.0.13 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3), 64-bit
(1 row)
                                                         ^

【问题讨论】:

    标签: postgresql-9.0


    【解决方案1】:

    我没有这个旧版本可以检查,但我相信你不能使用CTE更新(what you can for sure with 9.1),这种情况下你可以plpgsql它:

    do
    $$
    declare _r record;
    begin
      for _r in (SELECT id,last_name, first_name FROM salesmen JOIN accounts on salesmen.id = accounts.sales_id) loop
        UPDATE accounts SET contact_last_name = _r.last_name, contact_first_name = _r.first_name where sales_id = _r.id;
      end loop;
    end;
    $$
    ;
    

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2014-10-26
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 2020-05-25
      • 2022-12-27
      • 2017-08-18
      • 1970-01-01
      相关资源
      最近更新 更多