Oracle根据另一个数据列插入列

时间:2018-07-06 09:44:26

标签: sql oracle sql-insert

我需要将数据插入到列名称为column1和column2的表中。 我想根据column1的值在column2中插入数据。

例如,第1列的值将是第2列的值减去5

我尝试过这个:

INSERT INTO Table(column2) VALUES (column1-5)

如何实现此示例?

谢谢。

4 个答案:

答案 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。

好运。