Alle doppelten Einträge anzeigen

fink-x

Mitglied
Hallo,

also erstmal zur Tabellenstruktur

Spalten:
| name | vorname | verein |

Beispiel Inalte:

| Muster | Horst | Mannschaft A |
| Muster | Paul| Mannschaft C |
| Muster | Achim| Mannschaft B |
| Muster | Jule | Mannschaft B |
| Muster | Lili | Mannschaft C |
| Muster | Karl | Mannschaft C |

Ich will jetzt eine Abfrage realisieren welche mir alle Datensätze ausgibt wo mehr als einer in einem Verein enthalten ist:
Resultat sollte diese Ausgabe sein, da Manschaft B 2 Mitglieder hat und Mannschaft C 3 Mitgleider. Mannschaft A wird nicht angezeigt da es neu ein Mitglied gibt:

| Muster | Paul| Mannschaft C |
| Muster | Achim| Mannschaft B |
| Muster | Jule | Mannschaft B |
| Muster | Paul| Mannschaft C |
| Muster | Lili | Mannschaft C |
| Muster | Karl | Mannschaft C |

Ich hatte eine Abfrage welche auch funktioniert hat nur dauert diese Abfrage sehr sehr lang

PHP:
SELECT vorname, name, verein
FROM tabelle 

WHERE verein != "" AND verein IN (SELECT verein FROM tabelle WHERE verein != "" GROUP BY verein HAVING count(verein) >1)
ORDER BY verein

Meine Tabelle umfasst natürlich mehr Werte als diese und auch ein paar Spalten mehr.
Ich weiß das die Tabelle redundante Werte enthalten, aber das sollte nicht Thema der Diskussion sein

Wäre echt super von euch wenn ich ein Tipp von euch bekommen könnte!


Ach so, DBMS ist MySQL
 
Zuletzt bearbeitet:
Ich hatte eine Abfrage welche auch funktioniert hat nur dauert diese Abfrage sehr sehr lang

PHP:
SELECT vorname, name, verein
FROM tabelle 

WHERE verein != "" AND verein IN (SELECT verein FROM tabelle WHERE verein != "" GROUP BY verein HAVING count(verein) >1)
ORDER BY verein

Meine Tabelle umfasst natürlich mehr Werte als diese und auch ein paar Spalten mehr.
Ich weiß das die Tabelle redundante Werte enthalten, aber das sollte nicht Thema der Diskussion sein
Wenn du die Abfragezeit verbessern willst, wird man das Thema Normalisierung aber nicht ganz ausklammern können. An deinem Query könnte man höchstens einen der Vergleiche verein != "" weglassen, aber das wird wohl nicht viel ändern. Ansonsten könnte man überlegen, ob man auf die Spalte verein einen Index legt. Da wäre es halt praktischer, wenn das nur ein Fremdschlüssel wäre und keine Zeichenkette…

Grüße,
Matthias
 
Dann muss ich wohl in den sauren Apfel beißen und die Datenbank Normalisieren und mein Programm anpassen. Ich hatte gehofft das es eine einfachere Möglichkeit gibt.

Danke dir
 
SQL:
SELECT A.verein, A.vorname, A.Nachname
FROM tabelle  A
INNER JOIN  tabelle B
   ON A.verein = B.verein
GROUP BY A.verein, A.vorname, A.Nachname
HAVING count(B.verein) >1
ORDER BY verein

Je nach Datenmenge kannst Du A.Verein noch mit einem Index belegen.

Der Hinweis mit den normalisierten Daten von meinem Vorposter kommt aber nicht von ungefähr....

Grüße
gore
 
Zuletzt bearbeitet von einem Moderator:
Zurück