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 插入一个表减去另一个表但同时插入另一列的主要内容,如果未能解决你的问题,请参考以下文章