sql #postgresql
#sql #postgresql
Вопрос:
Я покопался здесь, и принятые ответы на другие вопросы мне не помогли.
У меня есть таблица «mytable», определенная как таковая
create table mytable (
column1 varchar(50) PRIMARY KEY,
column2 integer,
column3 money
)
все значения столбца 3 равны нулю, и я хочу вставить column2 / 1.25 в column3
Я пробовал эти:
--This gets 23502 "violates not-null constraint"
insert into mytable (column3)
select column2/1.25 from mytable
--This gets 42601 "syntax error near "select""
insert into mytable (column3)
select column2/1.25 from mytable
--Same as above with parentheses, gets the same error
insert into mytable (column3) values
(select column2/1.25 from mytable )
--Error 42601 "syntax error at or near "select""
insert into mytable (column1,column3) values
(select column1, column2/1.25 from mytable)
Я пробовал другие небольшие варианты круглых скобок, полей в двойных кавычках, но не могу понять, почему это вызывает у меня ошибки. Column1 является первичным ключом и не обнуляется, но я не пытаюсь вставить в этот столбец.
Любая помощь будет оценена
Комментарии:
1. Если вы хотите изменить значение столбца в существующей строке, вам необходимо использовать функцию UPDATE
Ответ №1:
INSERT
добавляет новые строки в таблицу, которые вам не нужны. Чтобы изменить существующие строки, используйте UPDATE
:
UPDATE mytable
SET column3 = column2 / 1.25;
Но это плохая идея по нескольким причинам:
- Избегайте этого
money
типа. Вместо этого используйте что-то вродеnumeric(15,2)
. - Не храните избыточные данные в базе данных, если это не неизбежно по соображениям производительности. Вы могли бы использовать представление:
CREATE VIEW myview AS SELECT column1, column2, CAST (column2 / 1.25 AS numeric(15,2)) AS column3 FROM mytable;
- Если вы действительно хотите сохранить избыточные данные, используйте сгенерированный столбец:
ALTER TABLE mytable ADD column3 numeric(15,2) GENERATED ALWAYS AS (column2 / 1.25) STORED;
Ответ №2:
Команда INSERT используется для вставки новой строки в таблицу. Вам нужно обновить существующую строку.
https://www.postgresqltutorial.com/postgresql-update/
UPDATE mytable
SET column3 = column2/1.25