Я не могу найти ответ на текущий вопрос с моими версиями 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
оставалась постоянной по моим столбцам?
Спасибо!!!
Вы можете попробовать обновить таблицу самостоятельно. Я вставил вашу таблицу в таблицу пользователей, которую я создал в 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.
Если вы хотите обновить таблицу, это будет работать в 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;