Hola: Muy bien no entiendo el problema pero si lo que necesitas es hacerlo solo una vez puedes hacerlo a través de un bucle, por ejemplo un Query (Le pongo Afiliados) que contenga
Código SQL
[-]Select Afiliados_id,Min(Id) as indice from AfiliadosControl
Group by Afiliados_Id
Esto te evitada mostrara solo el "menor" en id y sin duplicados ya que estas agrupando los afiliados, luego:
Código Delphi
[-]With TuComponenteSql do
Begin
Close;
Sql.Clear;
Sql.Add('Uptade AfiliadosControl');
Sql.Add('Set');
Sql.Add('Principal = 1');
Sql.Add('Where Id = :Codigo');
While not Afiliados.Eof d
Begin
ParamByName('Codigo').AsInteger := Afiliandos.FieldByName('Indice').Asinteger;
ExecQuery;
Afiliados.Next;
end;
end;
Nota: Nuevamente no se si lo haces una sola vez y ya o lo deseas hacer seguido, es decir, que es parte del sistema que lo haga habitualmente. En ese caso deberias probar algo como esto donde el bloque select muestra aquellos que se estan repitiendo pero no lo he probado y lo arme medio de memoria y por aproximacion
Código SQL
[-]Update afiliadosControl
Set
Principal = 1
Where Id <> (Select id,Afiliados_id from AfiliadosControl a1
inner join AfiliadosControl a2
on a1.afiliados_id = a2.afiliados_id
and a1.id < a2.id)
(Obviamente mucho no entiendo el problemilla)
Saludos