Subject Re: [firebird-support] Copying many fields between tables
Author Svein Erling Tysvaer
According to what Ann Harrison wrote in a message 20 August last year
(http://tech.groups.yahoo.com/group/firebird-support/message/88476), it
may look ugly, but isn't as slow as it may seem. Milan said he didn't
quite agree, whereas I have no idea who's right (both Ann and Milan are
very trustworthy and knowledgeable). So, have you tested and compared
the difference between updating one field and thirty fields this way?

Set

Lafras Henning wrote:
> Hi All
>
> I have a large number of fields (30+) that need to be copied from one
> table to another, at the moment I use the following code which seems
> inefficient:
>
> update Trans
> set
> TRANS.legal_name=(SELECT account.LEGAL_NAME FROM Account WHERE
> account.ref=trans.to_account )
> , TRANS.Del_1=(SELECT account.Del_1_1 FROM Account WHERE
> account.ref=trans.to_account )
> , TRANS.Del_2=(SELECT account.Del_1_2 FROM Account WHERE
> account.ref=trans.to_account )
> , TRANS.Del_3=(SELECT account.Del_1_3 FROM Account WHERE
> account.ref=trans.to_account )
> , TRANS.Del_4=(SELECT account.Del_1_4 FROM Account WHERE
> account.ref=trans.to_account )
> where (Trans.Ref='10976' )
>
> Is there a better method than this in Firebird?
>
>
> I found this article: http://www.cryer.co.uk/brian/sql/sql_crib_sheet.htm
> That describes other methods, but they don't work in firebird:
>
> This works in MS-Access and MySQL (5) but not in SQL Server:
> update TableOne
> inner join TableTwo on TableOne.commonID = TableTwo.commonID
> set TableOne.field1 = TableTwo.fieldX
> or
> This works in MS-Access but not in SQL Server:
> update TableOne, TableTwo
> set TableOne.field1 = TableTwo.fieldX
> where TableOne.commonID = TableTwo.commonID
> or
> This works in SQL Server but not in MS-Access (my thanks to John Lee for
> this):
> update tableOne
> set tableOne.field1=tableTwo.fieldX
> from tableOne, tableTwo
> where tableOne.commonID=tableTwo.commonID
>
>
> Regards
> Lafras