PL/SQL 插入一个表减去另一个表但同时插入另一列

Posted

技术标签:

【中文标题】PL/SQL 插入一个表减去另一个表但同时插入另一列【英文标题】:PL/SQL Inserting into a table minus another table but inserting another column at the same time 【发布时间】:2014-05-26 04:03:34 【问题描述】:

我有一个小问题,比如说我有一个有 5 列的表,我使用 另一个有 4 列的表中的MINUS 插入到该表中。

当我按照以下说明执行该语句时,在第 5 列中插入 (null) 或“”值时遇到问题invalid number of columns selected(我从中减去的表没有第 5 列)

这是我用于插入语句的代码

INSERT INTO my_table(SELECT col1, col2, col3, col4 FROM that_table 
MINUS SELECT col1, col2, col3, col4 FROM my_table);

此代码有效,如果我不创建第 5 列,它会复制我需要的任何内容,有没有办法将另一个表中的值与 my_table 中的第 5 列一起插入到我的表中?

谢谢

【问题讨论】:

感谢您提议的编辑 DKS :D 【参考方案1】:

假设我理解您的问题,您想从that_table 中选择所有记录并将它们插入到前4 列不存在的my_table 中,使用null 作为第5 列的值?如果是这样,您可以使用not exists

insert into my_table (col1, col2, col3, col4, col5)
select col1, col2, col3, col4, null
from that_table tt
where not exists (
    select 1
    from my_table mt
    where tt.col1 = mt.col1 and tt.col2 = mt.col2 
      and tt.col3 = mt.col3 and tt.col4 = mt.col4
    )

你应该也可以使用Minus,只要确保你有相同的列数和相同的数据类型:

insert into my_table (col1, col2, col3, col4, col5)
select col1, col2, col3, col4, null
from that_table
minus
select col1, col2, col3, col4, null
from my_table 

【讨论】:

抱歉没有让我的问题更清楚,that_table 包含我需要复制到当前表的数据,但是我当前的表创建了一个额外的列。我需要将数据从 that_table 复制到 my_table 并在复制的每条记录的第 5 列中插入空值。我会试试这个方法,看看能不能得到什么。 @user3674993 -- 我相信这应该做到这一点。您也可以使用MINUS - 只需确保两个查询返回相同数量的列(对于两者的最后一列可能为 null)。我只是更喜欢这种方法。 啊!我尝试做类似的事情,除了只在 FROM my_table 中插入 NULL,解决方案非常明显!谢谢【参考方案2】:

如果您只想插入选定的列,请尝试以下操作:

insert into my_table (col1, col2, col3, col4, col5) select col1, col2, col3, col4, null from that_table;

您可以在http://www.w3schools.com/sql/sql_insert_into_select.asp找到更多信息

【讨论】:

感谢有识之士,我去看看链接。

以上是关于PL/SQL 插入一个表减去另一个表但同时插入另一列的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 触发器插入下一个值

PL / SQL触发器在更新或插入后更新同一个表

使用 Record 插入数据 PL/SQL

如何在 PL/SQL 中增量集成数据

插入数据库表中一条记录同时也插入另一个表中的SQL语句怎么写

尝试将字段插入数据库表但出现错误“找不到对象”