MySQL - Doppelte Einträge von Spalte abhängig

Maniac

Erfahrenes Mitglied
Hi,

Ich hab auch mal wieder ein Problem, wo ich jetzt nicht auf Lösung komme.
Ich habe eine Tabelle in der ich Statistiken von Usern speichere.
Es kommt ab und an mal vor das sich hier doppelte Einträge einschleichen.

Nun möchte ich mit einer Abfrage herausfinden wo die doppelten Einträge sind.

Struktur der Tabelle im Anhang.

Gesucht werden sollen die doppelten "pid" pro "spieltag"
 

Anhänge

  • SQL-Abfrageergebnis - phpMyAdmin 3.3.7_1300442333395.png
    SQL-Abfrageergebnis - phpMyAdmin 3.3.7_1300442333395.png
    3,3 KB · Aufrufe: 115
HEy,

möchtest du die Doppelten als Resultat sehen oder die doppelten "ausblenden"?

Wenn du die doppelten "Ausblenden" möchtest,
dann genügt es, wenn du am Ende deiner Query die GROUP BY Funktion einfügst.

Wenn du die doppelten herausfinden möchtest, sollte folgender/ähnlicher Befehl funktionieren:
SQL:
SELECT spieltag, COUNT(*) as anzahl FROM tabelle WHERE anzahl > 1 GROUP BY spieltag

Damit erhälst du die Spieltage, an denen mehr als ein Eintrag vorhanden ist.

mfg
bo
 
Zuletzt bearbeitet von einem Moderator:
Gruppieren -> Zählen -> Ausfiltern -> zurückverlinken

SQL:
SELECT
	mytable.*
FROM
	mytable,
	(
		SELECT
			pid,
			spieltag
		FROM
			mytable
		GROUP BY
			pid,
			spieltag
		HAVING
			COUNT(*) > 1
	) AS doubles
WHERE
	mytable.pid = doubles.pid
	AND mytable.spieltag = doubles.spieltag
ORDER BY
	mytable.pid,
	mytable.spieltag
 
Zuletzt bearbeitet von einem Moderator:
Wenn du die doppelten "Ausblenden" möchtest,
dann genügt es, wenn du am Ende deiner Query die GROUP BY Funktion einfügst.

Wenn du die doppelten herausfinden möchtest, sollte folgender/ähnlicher Befehl funktionieren:
SQL:
SELECT spieltag, COUNT(*) as anzahl FROM tabelle WHERE anzahl > 1 GROUP BY spieltag

Die Bedinung muss in den HAVING-Teil. Das WHERE wird vor dem GROUP BY ausgeührt und da hast du die Anzahl noch nicht. Zudem muss die pid mit rein, da du sonst nur Zählst wieviele Einträge es pro Spieltag hat.
SQL:
SELECT
	pid,
	spieltag
FROM
	mytable
GROUP BY
	pid,
	spieltag
HAVING
	COUNT(*) > 1
 
Zuletzt bearbeitet von einem Moderator:
Zurück