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



我在Firebird 2.5上工作我有两个表,它们所有的列都是相似的,除了一个有一个主键与自动增量和一个非空外键字段(a)的主表

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

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

但是关于字段(A)是否有任何方法可以在相同的sql语句中手动插入该值?因为这是唯一需要手动输入的字段

谢谢

您可以显式指定源和目标字段(并且应该;除非有特别的理由,否则不要使用select *):

insert into table1
(
    col1,
    col2,
    col3,
    col4
)
select
    col1,
    col2,
    col3,
    'foo'
from table2
where something = 'foo'

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

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

   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));

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

相关内容

  • 没有找到相关文章

最新更新