【问题标题】:SQL - Updating table from other table selecting update row based on "priority" setting. (PostgreSQL 11.0)SQL - 从其他表更新表,根据“优先级”设置选择更新行。 (PostgreSQL 11.0)
【发布时间】:2021-06-23 23:34:14
【问题描述】:

我正在尝试使用表 B 中的“ea”值更新 A 中的“ea”列。

表 A 具有“cfn”和“ea”,并且具有唯一的产品条目。

表 B 有 'cfn' 和 'ea' 和 'dchain' 并且对于同一产品(不同的 dchain)可能有多个条目。

表 B 的“dchain”字段链接到表 C,该表具有“dc”和“prio”设置(整数)。

从表B​​中选择更新表A的记录需要根据表C的优先级。 我已经尝试了限制和顺序的多个选项,但不知何故我错过了正确的顺序,因为结果总是错误的.....

【问题讨论】:

  • 请添加你的累码
  • 这是我之前的代码:update cfn_check a set a.ea = b.ea from mstrdata_s153 b where b.dchain='DR' and a.cfn = b.cfn;现在的问题是我需要将 b.dchain 的选择更改为添加的表 C 的最大值

标签: sql postgresql


【解决方案1】:

如果我理解正确,您可以使用以下方法获取要更新的值:

select distinct on (b.cfn) b.*
from b join
     c
     on b.dchain = c.dc
order by b.cfn, c.priority;

注意:这假设较低的优先级更重要。如果优先级更高,则将desc 添加到第二个键。

然后您可以将其合并到update

update a
    set a.ea = bc.ea
    from (select distinct on (b.cfn) b.*
          from b join
               c
               on b.dchain = c.dc
          order by b.cfn, c.priority
         ) bc
    where bc.cfn = a.cfn;

【讨论】:

  • 戈登,谢谢!完美的解决方案,我学到了很多!
  • @GielHendrix 。 . .如果这回答了您的问题,您可以接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多