Я хочу вставить данные в столбец из данных собственной таблицы?

  • У меня есть таблица под названием T1.
  • Мне нужно вставить данные в новый столбец Change таблицы T1.
  • Change значения столбца будут разностью открытых и закрытых столбцов (закрытие-открытие).
Дата и время открыть Закрывать Изменять 14 марта 2000 г. 1561,55 1567,05 15 марта 2000 г. 1546,8 1620,1 16 марта 2000 г. 1620,4 1562,2 21 марта 2000 г. 1563,3 1556,6

Я пытаюсь выполнить запрос ниже, но появляется ошибка

Ошибка SQL: ORA-00936: отсутствует выражение

insert into T1(change) 
values
(
select 
case when open<close then close-open
     when open>close then close-open
end as change
from T1
order by datetime
);
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите заполнить столбцы существующих строк, вы используете оператор update, а не оператор insert. Просто используйте оператор обновления и примените выражение в предложении set:

update t1 set change = close-open;

Однако сохранение производных значений не является хорошей практикой проектирования. Что произойдет, если кто-то или какой-то код обновит один из столбцов компонента и забудет также обновить производный столбец? Таким образом вы можете легко получить противоречивые данные. Лучше всего вычислять производные столбцы во время запроса, а не сохранять их. Просто сделайте это в операторах выбора, которые вы используете при запросе исходной таблицы:

select t1.*,close-open change from t1

Если существует довольно постоянно используемая формула, вы можете добавить в таблицу «виртуальный столбец», который будет применять формулу для вас во время запроса, как если бы значение было сохранено в таблице, хотя это не так - под обложки просто вычисляют формулу при запросе:

alter table t1 add (change number as (close-open) virtual);

Теперь запрос:

select * from t1

Или создайте представление, встраивающее формулу:

create view v1 as select t1.*,close-open change from t1

Теперь запрос:

select * from v1

У вас есть множество вариантов, позволяющих получить производное значение во время запроса, поэтому вам не нужно фактически хранить его в таблице и рисковать несогласованностью данных. Но если вы хотите сохранить его физически, используйте простой оператор update.

Другие вопросы по теме