Hans: mysql distinct

Beitrag lesen

Hallo Mr. better_not_doing, *SCNR*

1.) create table rettung as select * from doppelte_eintrag_tabelle where 1=0;
2.) alter table rettung nologging;
3.) insert into rettung (ID, spalte1, spalte2) select id, spalte1, spalte2 from doppelte_eintrag_tabelle where id in (select id from (select min(id) as id, spalte1, spalte2 from doppelte_eintrag_tabelle group by spalte1, spalte2));
4.) commit;
5.) alter table doppelte_eintrag_tabelle nologging;
6.) delete from doppelte_eintrag_tabelle;
7.) drop table doppelte_eintrag_tabelle
8.) create table doppelte_eintrag_tabelle as select * from rettung; /* Achtung: kein "where 1=0" !!!
9.) commit;
10.) delete from rettung;
11.) drop table rettung;

zu 3.)

Du mußt ja ein Kriterium haben, ab dem eine Zeile eindeutig ist (die ID ausgenommen). Dann holst Du Dir die kleinste ID aus diesem Block gleicher Zeilen (da ja bei Dir auch doppelte Zeilen unterschiedliche ID's haben). Um an das Minimum (oder Max) zu kommen, mußt Du einen Bock bilden, innerhalb dessen das Extrema gebildet wird. Dies machst Du bei group by. Da bei Oracle dummerweise das group by auf alle Spalten des selects gehen, muß man halt hier alle Spalten angeben, vielleicht ist das bei mysql anders.

Sprich:

ID Spalte1 Spalte2
1  Hallo   Hans
2  Hallo   Hans
3  Hallo   Hans

Ergebnis obiger Abfrage:

min(ID) Spalte1 Spalte2
1       Hallo   Hans

Ich hoffe, ich habe jetzt nicht noch mehr Verwirrung gestiftet :-)

Falls Du Dir nicht sicher bist, das Statement aus 3.) Händisch ohne insert ausprobieren und dran rumfeilen, bis es bei Dir paßt und Du verstehst, was Du machst.

Gruß

Hans