Subject Re: Exchange two column values in a single statement...
Author Adam
> ...without a temporary field ;)
>
> update t1 set a = a+b, b = a-b, a = a-b;

Milan,

I think you are relying on two non standard behaviours.

1. Including the same field twice in a single update statement.
2. I am pretty sure SQL says that the original values should remain
constant during the operation, and Firebird does not do this.

Assume before the update, a = 1 and b =2:

Firebird evaluates:

a = a + b ==> 3
b = a - b ==> 3 - 2 ==> 1
a = a - b ==> 3 - 1 ==> 2

Where SQL says it should be

a = a + b ==> 3
b = a - b ==> 1 - 2 = -1 (the new value of a is not used)

The second assignment to a is not valid.

Still, very clever.

Adam