Oracle sql将行插入另一个表并更新数据

时间:2017-08-22 22:34:36

标签: sql oracle insert

在Oracle sql中,我可以在另一个表中选择一行

insert into TableA (select * from TableB b where b.id = 2);

然而,b.color =' blue'并且我希望在将行插入TableA之前将其更新为红色,而不必从TableB中选择每一列,我想选择*。

请不要将此标记为另一个问题的答案,并提供一个我无法使用的答案链接。 TableA没有与TableB匹配的ID。

谢谢

3 个答案:

答案 0 :(得分:0)

将您的选择插入临时表(您必须创建),然后将临时表更新为红色,然后将其插回A

  INSERT INTO TEMP_TABLE 
  Select * from TableB b where b.id = 2

  Update temp_table
  Set color = 'Red'

  Insert into TableA (Select * from Temp_table)

答案 1 :(得分:0)

"我想选择*"

没有意义,因为你不想选择*。如果你这样做,你会想要红色而不是蓝色作为颜色。

你可以使用触发器来解决这个问题,例如

trigger BLAH 
before insert on A
for each row
begin
  :new.color := case when :new.color = 'blue' then 'red' else :new.color end;
end;

但是男人......我不能告诉你这是一个坏主意。

答案 2 :(得分:0)

我建议:

insert into TableA(col1, . . . , color, . . . coln)
     select . . . , (case when color = 'blue' then 'red' else color end), . . .
     from TableB b
     where b.id = 2;

无论您是否喜欢,最好列出insertselect的所有列,尤其是可能运行多次的代码。

如果您发现列出列(使用电子表格或SQL查询)太难了,您可以在事后更新

insert into TableA
     select *
     from TableB b
     where b.id = 2;

update TableA
    set color = 'red'
    where color = 'blue' and id = 2;

这是近似值,因为您可能已经在表格中有行,但它提供了一个想法。