SQLPro或PostgreSQL基于前一行值更新SQL行

问题描述 投票:0回答:2

我无法用我的SQL版本找到当前问题的答案,所以希望有人可以帮助我。

我使用MySQL和SQLPro作为客户端,或者我可以使用PostgreSQL pgAdmin 4。

我试图用以前的null更新not null value值。

这是我的表:

primary_id  name  address  id
1           bob   123 main 100
2           jane  123 main NULL
3           mike  217 2nd  200
4           jeff  217 2nd  NULL

如何用null填充not null values值,以便address/ID分组在我的列上保持不变?

谢谢!!!

mysql sql postgresql
2个回答
0
投票

如果你想更新表格,这将在Postgres中有效:

update t
    set id = (select t2.id
              from t t2
              where t2.address = t.address and t2.id is not null
              fetch first 1 row only
             )
    where id is null;

在MySQL中,这将工作:

update t join
       (select address, max(id) as max_id
        from t
        group by address
       ) tt
       on t.address = tt.address
    set t.id = tt.max_id
    where t.id is null;

0
投票

您可以尝试自己更新表。我将您的表插入到我在postgres中创建的用户表中:

UPDATE users
  SET
    id = _users.id
FROM
(
  SELECT DISTINCT
    address,
    id
    FROM users
    WHERE id IS NOT NULL
    GROUP BY
      address,
      id
) _users
WHERE
    _users.address = users.address
    AND users.id IS NULL;

所以我的想法是我抓住所有非空地址和id组(假设地址总是与相同的id配对。我称之为_users。

将_users.address与原始users.address匹配。确保您只更新NULL users.id。

© www.soinside.com 2019 - 2024. All rights reserved.