Firebird sql从另一个表中只插入一个不同字段的典型记录

时间:2011-07-20 03:48:05

标签: sql firebird sql-insert

我在Firebird 2.5上工作 我有两个表,除了一个主键具有自动增量而一个非空外键字段(A)用于主表

之外,它们的所有列都相似

我知道我可以使用这样的sql来插入两个表中的所有值

 insert into table1 select * from table2 where somthing = 'foo'

但是字段(A)有什么方法可以在同一个sql语句中手动插入这个值?因为这是唯一需要手动输入的字段

由于

2 个答案:

答案 0 :(得分:5)

您可以明确指定源字段和目标字段(并且应该;除非您有特定原因,否则不要使用select *):

insert into table1
(
    col1,
    col2,
    col3,
    col4
)
select
    col1,
    col2,
    col3,
    'foo'

from table2

where something = 'foo'

答案 1 :(得分:2)

来到这篇文章是因为我正在寻找一个解决方案来做同样的事情,但没有对字段名称进行硬编码,因为字段可能被添加/删除,并且不想记得更新复制记录过程。

在谷歌搜索了一段时间之后,我想出了这个解决方案:

   select cast(list(trim(RDB$FIELD_NAME)) as varchar(10000))
      from RDB$RELATION_FIELDS 
      where RDB$RELATION_NAME = 'YOUR_TABLE' 
         and RDB$FIELD_NAME not in ('ID') -- include other fields to NOT copy
   into :FIELD_NAMES;

   NEW_ID = next value for YOUR_TABLE_ID_GENERATOR;

   execute statement '
      insert into YOUR_TABLE (ID,' || FIELD_NAMES || ')
      select ' || cast(:NEW_ID as varchar(20)) || ',' ||
         FIELD_NAMES || '
         from YOUR_TABLE
         where ID = ' || cast(:ID_OF_RECORD_TO_COPY as varchar(20));

希望这为遇到此问题的其他人节省一些时间!