SQL Abfrage, doppelte Einträge
Hallo,
brauche mal Hilfe mit einer SQL-Abfrage. Und zwar versuche ich doppelte Adresseinträge aus einer Datenbank auszulesen.
Habe es jetzt schon hinbekommen jeweils einen Eintrag auszulesen. Mit der folgenden Abfrage:
SELECT * FROM adr_adressen WHERE (SELECT f_adr FROM adr_adressen GROUP BY f_adr HAVING count(f_adr) > 1 ORDER BY f_adr DESC LIMIT 1) = f_adr
Ohne das Limit bekomme ich leider folgende Fehlermeldung:
Error Code : 1242
Subquery returns more than 1 row
(0 ms taken)
Hat irgendjemand eine Ahnung wie der Query richtig aussehen muss um alle Datensätze zu bekommen?
Gruß,
S1lv3R
Antwort schreiben
Antwort 1 von RaHi vom 29.06.2021, 19:33 Options
Hallo S1lv3R,
du schreibst zwar nicht mit welchem SQL-Dialekt du arbeitest, aber mit folgendem Code läufts z.B. unter Access, Oracle, ...
SELECT * FROM adr_adressen WHERE f_adr in (SELECT f_adr FROM adr_adressen GROUP BY f_adr HAVING count(*) > 1)
Gruß
Ralf
Antwort 2 von S1lv3R vom 29.06.2021, 20:54 Options
Hey Ralf,
ist MySQL, läuft aber trotzdem... bis auf die Performance ... ohne LIMIT (auf 10 000 Adressen) läuft es gar nicht durch.
Zitat:
SELECT * FROM adr_adressen WHERE f_adr in (SELECT f_adr FROM adr_adressen GROUP BY f_adr HAVING count(*) > 1) ORDER BY f_adr LIMIT 100
Zitat:
(100 row(s)returned)
(367547 ms taken)
mehr als 6 Minuten für die Abfrage bei Verwendung von 1% der Daten ... während die Ausgabe aller Datensätze (SELECT * FROM adr_adressen) grade mal 157 Millisekunden dauert.
:-(
Gruß,
Malte
Antwort 3 von RaHi vom 30.06.2021, 08:03 Options
Hallo,
Hast du einen Index auf f_adr gesetzt?
Gruß
Ralf
Antwort 4 von S1lv3R vom 30.06.2021, 09:20 Options
Guten Morgen Ralf,
Nein, explizit habe ich das nicht getan ... dumme Frage, aber wo muss man im phpmyadmin klicken? ;-)
Danke schonmal!
Gruß,
Malte
Antwort 5 von RaHi vom 30.06.2021, 17:52 Options
Hallo Malte,
wenn du in phpmyadmin einen SQL-Editor öffnest (Datenbank auswählen und Sheet SQL öffnen), kannst du direkt per SQL den Index anlegen mit
create index idx_f_adr on adr_adressen (f_adr) ;
oder du klickst dich durch die Tabelle, gehst auf das Tabellenfeld aktiviert den Icon für die Indexerstellung (Tabelle mit Blitzsymbol).
Probiere es mal aus, ich bin gespannt, ob es danach besser läuft.
Gruß
Ralf
Antwort 6 von S1lv3R vom 30.06.2021, 22:13 Options
Guten Abend Ralf,
läuft super! :-)
Ohne Limit:
Zitat:
(3261 row(s)returned)
(115766 ms taken)
Mit Limit 100:
Zitat:
(100 row(s)returned)
(172 ms taken)
Das nenn ich Optimierung ... Danke für deine Hilfe! :-)
Gruß,
Malte