繁体   English   中英

SQLPro或PostgreSQL SQL根据前一行的值更新行

[英]SQLPro or PostgreSQL SQL updating row based on previous row value

我的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

在此处输入图片说明

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

谢谢!!!

如果要更新表,则可以在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;

您可以尝试使用自身更新表。 我将您的表插入在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。

暂无
暂无

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

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