首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLPro或PostgreSQL SQL根据前一行的值更新行

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

Stack Overflow用户
提问于 2017-12-26 04:18:40
回答 2查看 123关注 0票数 0

在我的SQL版本中,我找不到当前问题的答案,所以希望有人能帮助我。

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

场景我正在尝试用以前的not null value更新一个null值。

下面是我的表格:

代码语言:javascript
复制
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分组在我的列中保持不变?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-12-26 04:40:51

如果您想要更新表,这将在Postgres中工作:

代码语言:javascript
复制
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中,这将起作用:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-12-26 04:59:29

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

代码语言:javascript
复制
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进行匹配。确保您仅更新空users.id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47971758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档