online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon S1lv3R vom 29.06.2021, 18:50 Options

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

Ähnliche Themen

Daten in SQL-Tabelle schreiben
_mpact  07.02.2008 - 30 Hits - 1 Antwort

DateTime in SQL speichern
_mpact  19.02.2008 - 54 Hits - 4 Antworten

Nicht existierende Einträge hinzufügen
Uesch  29.02.2008 - 32 Hits - 5 Antworten

SQL Befehl USER ID
Joe4589  23.01.2009 - 217 Hits - 3 Antworten

MySQL Anzahl einträge abfragen
TByte  21.05.2009 - 296 Hits - 3 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026