你能用子句进行INSERT *和*添加其他信息吗?

时间:2012-01-26 21:55:12

标签: sql oracle

我有两张桌几乎相同:

  • employee
  • employee_history

第二个表有两个额外的字段。

我想使用带有子查询的INSERT将记录从employee复制到employee_history。有点像这样:

INSERT INTO employee_history SELECT * FROM employee WHERE id = idQ   

我的问题是,我需要在employee_history没有的employee字段中添加信息:

  • update_code
  • date_of_change

我是否有办法将记录从employee复制到employee_history,与上面的插入语句一样简单,同时添加2个新的数据?

2 个答案:

答案 0 :(得分:3)

这样的东西?

INSERT INTO employee_history 
SELECT emp.field1, emp.field2, emp.field3, 'new value A', 'new value b'
FROM employee emp
WHERE emp.id = idQ

答案 1 :(得分:2)

employee表别名并选择所有列,然后在它们适合的任何位置添加两个新列(在列表的开头或结尾):

INSERT INTO employee_history SELECT e.*, 'x', 'y' FROM employee e WHERE id = idQ;

您需要为表格设置别名,因为如果您按原样运行它会收到错误(ORA-00923: FROM keyword not found where expected):

INSERT INTO employee_history SELECT *, 'x', 'y' FROM employee WHERE id = idQ;

问题是如果employee_history表中的两个附加列位于employee表中列的中间位置。在这种情况下,您必须单独选择每列。