У меня есть таблица «MyData» с некоторыми данными данных:как нормализовать/обновлять столбец «заказ»
id name position
===========================
4 foo -3
6 bar -2
1 baz -1
3 knork -1
5 lift 0
2 pitcher 0
я принести стол упорядоченного используя order by position ASC;
значение столбца позиции может быть не уникальный (по какой-то причине не описанный здесь :-) и используется для предоставления пользовательского заказа во время SELECT
.
то, что я хочу сделать:
я хочу, чтобы нормализовать столбца таблицы «позицию», связывая уникальную позицию каждой строки, которая не суммируется и не уничтожить заказ. кроме того, самое высокое положение после нормализации должно быть -1.
хотел результирующее содержимое таблицы:
id name position
===========================
4 foo -6
6 bar -5
1 baz -4
3 knork -3
5 lift -2
2 pitcher -1
я пытался несколько способами, но не сумел реализовать оператор правильноupdate
.
я предполагаю, что использование
generate_series(-(select count(*) from mydata), -1)
является хорошей отправной точкой, чтобы получить новые значения для столбца позиции, но я понятия не имею, как объединить, что сгенерированные данные столбцов в отчете обновления.
надежда кто-то может помочь мне :-)
Для исполнения добавьте 'и position <> r.rn' в предложение where. Иначе вы закончите переписывание многих строк, которые не должны. –
@Denis: хорошая точка.Хотя я думаю, что это, вероятно, не изменится очень сильно. –
Это может быть огромным, когда в большинстве строк содержится правильное значение (это часто бывает для упорядочения индексов). :-) Если вся таблица была переписана запросом, рекомендуется сразу (и вручную) вакуумировать. –