SQLPro или PostgreSQL SQL обновление строки на основе предыдущего значения строки

0

Я не могу найти ответ на текущий вопрос с моими версиями 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

Изображение 174551

Как я могу заполнить null значения с помощью not null values чтобы группировка address/ID оставалась постоянной по моим столбцам?

Спасибо!!!

Теги:

2 ответа

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 (предполагая, что адрес всегда сопряжен с одним и тем же идентификатором. Я вызываю это _users.

Сопоставьте _users.address с исходными пользователями.address. Убедитесь, что вы обновляете только NULL users.id.

  • 0
    интересно спасибо!
  • 0
    Спасибо! это работало как шарм в postgres ценим помощь!
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
    Привет! Я пытался заставить ваше решение работать, и хотя оно работает на моей таблице примеров, оно не работает на реальной таблице .... Мой запрос: обновить объединение семейства (выберите home_street, max (account_id) как max_id из семейной группы home_street) tt на family.home_street = tt.home_street set family.account_id = tt.max_id, где family.account_id равен нулю; Я не получаю ошибок, но ничего не обновляется ... значения account_id выглядят так: 0011I00000EWWDD в таблице около 78 столбцов, не уверен, что это изменит. Что я делаю неправильно? Спасибо!!!
  • 0
    @DavidO. , , Адреса могут выглядеть одинаково, но все равно будут разными - потому что используются наборы символов.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню