我需要将数据插入到列名称为column1和column2的表中。 我想根据column1的值在column2中插入数据。
例如,第1列的值将是第2列的值减去5
我尝试过这个:
INSERT INTO Table(column2) VALUES (column1-5)
如何实现此示例?
谢谢。
答案 0 :(得分:1)
如果要将UPDATE值从一个列表转换为另一列表,则必须使用UPDATE语句,而要创建新行,请使用语句INSERT。
在这里您可以找到答案:https://www.techonthenet.com/oracle/insert.php
INSERT INTO table
(column1, column2, ... column_n )
SELECT expression1, expression2, ... expression_n
FROM source_table
[WHERE conditions];
(您可以在表达式中使用子查询) 取而代之的是
UPDATE
table_name
SET
column1 = SELECT expression1,
column2 = SELECT expression2,
column3 = SELECT expression3,
...
WHERE
condition;
答案 1 :(得分:0)
让我们说我们想为column2添加3行
insert into table (column2) values
((select column1 from table where id=1)-5),
((select column1 from table where id=2)-5),
((select column1 from table where id=3)-5)
答案 2 :(得分:0)
在关系数据库中,拥有另一个可以从现有列轻松计算的列会浪费资源。
从Oracle 11g开始,我们有一个名为Virtual Columns的功能。当查询时,虚拟列似乎是普通表列,但是它们的值是派生的而不是存储在磁盘上。
因此,根据您的评论,
我想创建新的column2并根据 column1(已填满数据)
您可以做的就是添加一个虚拟列column2
,
ALTER TABLE yourtable ADD (
column2 NUMBER AS ( column1 - 5 )
);
您可能无法直接修改column2
,并且其中将不包含任何数据。但是,当查询时,它将返回计算出的值。
select * from yourtable;
column1 column2
------- -------
10 5
20 15
即使在告诉您这一点之后,如果您仍然希望拥有真实的列column2
,也可以在使用update
添加列并以以下方式运行更新查询后执行ALTER TABLE ADD COLUMN ..
操作:
update table1 set column2 = column1 -5 where ..
但这会很昂贵,因此不建议用于此用例。
答案 3 :(得分:0)
根据您的描述,您想要做的是:
ALTER YOUR_TABLE
ADD (COLUMN2 NUMBER);
然后
UPDATE YOUR_TABLE
SET COLUMN2 = COLUMN1 - 5;
COMMIT;
第一条语句将COLUMN2
添加为表YOUR_TABLE
上的新列。第二条语句将新列COLUMN2
的值设置为COLUMN1
减去5。
好运。