Обновление набора со столбцами, зависящими от другого

#sql #postgresql #sql-update

#sql #postgresql #sql-обновление

Вопрос:

Я пытаюсь установить значения столбцов, например area , затем использовать это area значение столбца, например, в следующем наборе area * somecolumn . Когда я это делаю, кажется, что area это еще не установлено. Нужно ли мне что-то делать, чтобы postgres регистрировал / понимал / фиксировал для работы следующего оператора set? Или это должно работать?

 update table1 t1
set
    area = something;
    --update/commit/save edits/?

update table1 t1
set
    volume = area * col1 #I belive area hasnt been set yet so volume become NULL. But when I look at the table afterwards, area has a value

and many more...
 

Ответ №1:

Ваши запросы должны делать то, что вы намереваетесь, предоставлять это «что-то» и col1 нет null .

Однако вы можете легко делать то, что хотите, с помощью одного оператора:

 update table1 t1
set area = $1, volume = $1 * col1
 

Комментарии:

1. Хорошо, тогда я, должно быть, делаю что-то еще неправильно, я постараюсь выяснить. Что такое знак доллара для / вызывается?

2. @BERA: это параметр привязки, который представляет значение, которое вы хотите передать в запрос (вы назвали это «что-то» в своем вопросе).

3. Знак доллара используется для ссылки на входные параметры в их соответствующем порядке.

4. @БЕРА: Я понимаю. Это называется целочисленным делением. Примечание: я бы рекомендовал использовать точный тип данных ( numeric , decimal ), а не real , что является неточным.

5. @БЕРА: да. Если существует один числовой операнд, вся операция выполняется в числовом контексте.