hallo
deine tabelle hat offenbar keinen primary key. ist jetzt kein grundsätzliches problem, schafft aber einige hürden. die meisten grafischen db-tools, wie auch der enterprise manager, gehen beim löschen einer zeile so vor, dass sie den primary key der tabelle bestimmen, dazu dann den spaltenwert aus der zeile laden und eine entsprechende delete-anweisung absetzen. wenn die tabelle keinen primary key hat, versuchen manche tools wie eben der enterprise manager, selbständig herauszufinden, welche spalte einen halbwegs eindeutigen wert hat und löscht dann damit. andere tools geben schon vorher auf und lassen überhaupt keine änderungen der daten zu, falls kein primary key existiert.
das löschen von doppelten datensätzen ist sowieso nicht trivial. die meisten tools lassen das nur direkt über sql zu. der grund ist danz einfach: die beiden datensätze unterscheiden sich vermutlich ausschließlich über die rowid. diese ist db-intern und wird normalerweise nicht angezeigt bzw. mitselektiert, d.h. sie ist nicht in der ergebnismenge drinnen. also auch keine chance für das tool, gezielt diesen datensatz zu löschen.
mit sql geht es so: angenommen du hast die tabelle „daten“ mit den spalten „nr“, „name“, etc. zwei zeilen haben absolut identische werte. die spalte „nr“ ist aber immerhin soweit eindeutig, dass nur diese beiden zeilen den selben wert hier haben. dann geht das in etwa so:
delete from daten
where rowid = (select max(rowid) from daten where nr = 123);
damit löscht du den datensatz mit der höheren rowid - was normalerweise der zuletzt eingefügte datensatz ist.
ich würde empfehlen, einen primary key zu definieren. dann kann sowas nicht passieren.
lg
erwin