У меня таблица с полем была хеширована следующим образом:
order_id, order_detail_id
//qwe221, jdeiwe
//qwe221, eudasd
kasdaw25, saderf
kasdaw25, syehsd
kasdaw25, kredss
Я хочу, чтобы это было так, чтобы было легче поддерживать
order_id, order_detail_id, order_id_alias
//qwe221, jdeiwe, 1
//qwe221, eudasd, 1
kasdaw25, saderf, 2
kasdaw25, syehsd, 2
kasdaw25, kredss, 2
Пожалуйста, помогите мне, объясните, как это сделать шаг за шагом НА SQL. Спасибо!


использовать оконную функцию
select *, dense_rank() over(order by order_id) order_id_alias from t
это работает следующим образом: с new_values as (select *, density_rank () over (order by order_id) diff from t) update t set order_id_alias = new_values.diff from new_values, где new_values.order_id = t.order_id; можно ли определить начальный номер density_rank? вроде должно начинаться с 1000?
Вы можете вставить, используя,
INSERT INTO table_name (col_1, col_2, col_3)
SELECT col_1, col_2, col_3
FROM another_table
WHERE col_1 = 'value';
Вы можете обновить таблицу, используя:
update t
set order_id_alias = tt.seqnum
from (select order_id, row_number() over (order by order_id) as seqnum
from t
group by order_id
) tt
where t.order_id = tt.order_id;
Примечание. Возможно, вам потребуется добавить столбец order_id_alias в таблицу, если его там еще нет.
Оно работает! Благодарность! а теперь как вставить результат в поле order_id_alias в db?