繁体   English   中英

使用一列的最大值更新选择Postgresql

[英]Update select using the max of one column Postgresql

因此,我正在更改数据库结构。 我正在将一列“大小”从table_B移到table_A。 Table_B可以具有多个引用table_A.a_id的条目

我想用具有最高b_id的行从table_B更新table_A中的新“大小”列。

因此,我可以使用Max()和group by为每个a_id选择最高的b_id。

SELECT max(b_id)
FROM table_B
GROUP BY a_id;

但我不确定如何将其与更新选择配合使用

UPDATE table_A
SET table_A.size = table_B.size
FROM table_A, table_B
WHERE table_A.a_id = table_B.a_id
AND table_B.b_id = 
(
    max...
);

编辑:我意识到现在这实际上不是更新选择,我的第一次尝试是

table_B的外观以及table_A中的预期结果

table_A
a_id        | size
-------------------------
1           | 5678
2           | 456

table_B
b_id        | a_id       | size
--------------------------------------
1           | 1          | 1234
2           | 1          | 5678
3           | 2          | 456

首先,编写select以获取所需的大小:

select distinct on (b.a_id) b.a_id, b.size
from tableb b
order by b.a_id, b.b_id desc;

接下来,将其合并到update

update tablea a
    set size = b.size
    from (select distinct on (b.a_id) b.*
          from tableb b
          order by b.a_id, b.b_id desc
         ) b
    where a.a_id = b.a_id;

您可以尝试以下查询

UPDATE table_A 
SET table_A.size = 
    ( SELECT table_B.size
      FROM table_B B1
      WHERE table_A.a_id = B1.a_id AND
      B1.b_id = (SELECT max(b_id) FROM table_B B2 WHERE table_A.a_id=B2.a_id))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM