>Hello,
>
>  Thanks for the answer.
>  How can I optimize if I want to use a DML command in conjunction
>  with a subselect, e.g.
>
> delete from test where Id in (
> select min(t.Id) FROM test t
> group by t.reference, t.key
> having count(*) > 1
> )
>

Hi  Björn!

I don't think there is any simple way to make a delete with a subselect as the 
only part of a where clause perform great on largish tables. That is, using 
EXECUTE BLOCK (which doesn't exist on older Firebird versions) should perform 
OK:

execute block as
  declare variable id integer;
begin
  for select min(t.Id) FROM test t
      group by t.reference, t.key
      having count(*) > 1
  into :id do
    delete from test where Id = :id;
end

HTH,
Set

Reply via email to