在Oracle sql中,我可以在另一个表中选择一行
insert into TableA (select * from TableB b where b.id = 2);
然而,b.color =' blue'并且我希望在将行插入TableA之前将其更新为红色,而不必从TableB中选择每一列,我想选择*。
请不要将此标记为另一个问题的答案,并提供一个我无法使用的答案链接。 TableA没有与TableB匹配的ID。
谢谢
答案 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;
无论您是否喜欢,最好列出insert
和select
的所有列,尤其是可能运行多次的代码。
如果您发现列出列(使用电子表格或SQL查询)太难了,您可以在事后更新 :
insert into TableA
select *
from TableB b
where b.id = 2;
update TableA
set color = 'red'
where color = 'blue' and id = 2;
这是近似值,因为您可能已经在表格中有行,但它提供了一个想法。