CodeForum.ch

Code Foren => SQL => Thema gestartet von: schnurzli am 11. Mai 2006, 18:02:31



Titel: SQL - doppelte Einträge ausgeben
Beitrag von: schnurzli am 11. Mai 2006, 18:02:31
Hallo,

habe folgenden Code verwendet um doppelt vorhandene daten aus einer SQL DB zu lesen. wie mache ich das nur, damit ich die die gesamte zeile und nicht nur die spalte angezeigt bekomme?

Code:
SELECT DISTINCT test
FROM         table
GROUP BY test
HAVING      (COUNT(test) > 1)


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: dmaphy am 11. Mai 2006, 18:08:17
Code:
SELECT DISTINCT *
FROM         table
GROUP BY test
HAVING      (COUNT(test) > 1)


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: schnurzli am 11. Mai 2006, 18:17:06
das habe ich bereits probiert, jedoch erhalte ich dann immer:

Zitat
Die spalte2-Spalte ist in der Auswahl ungültig, da sie nicht in der Aggregatfunktion und nicht in der Group By Klausel vorhanden ist


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: Gobo am 11. Mai 2006, 18:38:56
Versuch es einfach mal ohne DISTINCT:

Code:
SELECT *
FROM         table
GROUP BY test
HAVING      (COUNT(test) > 1)

Wie die Fehlermeldung nämlich bereits angedeutet hat, ist DISTINCT zwingend mit GROUP BY verbunden und kann meines Wissens nach auch nicht mit dem * verwendet werden, sondern immer nur mit eindeutigen Spaltennamen.


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: schnurzli am 11. Mai 2006, 18:46:22
bringt leider dasselbe ergebnis :(

hab jetzt versucht, ein paar spalten einzubinden also anstelle von *, "spalte1, spalte2" jedoch gibt er mir dann die richtige anzahl an zeilen aus, aber nicht den inhalt.

wenn ein eintrag doppelt ist, dann wird eine leere zeile ausgegeben, wenn 2 doppelte einträge sind, dann werden 2 leere zeilen ausgegeben...

schon komisch...


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: Gobo am 11. Mai 2006, 23:43:57
Hast Du die Möglichkeit, Subqueries zu nutzen? Ich denke damit sollte es dann endlich möglich sein. Auch wenn ich mir eigentlich sicher bin, dass es auch ohne gehen müsste...


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: Laubi am 12. Mai 2006, 07:37:40
mit subqueries ist es am einfachsten ja.. geht aber teilweise auch ohne, ist nur die frage was du willst

wenn du sowas hast:
1, 2
1, 3

und du nach der ersten spalte (1) gruppieren willst um duplicates in der ersten spalte zu entfernen - welchen wert aus der zweiten nimmst du dann? sprich dann brauchst du eine aggregats funktion pro spalte die nicht gruppiert ist


willst du in dieser tabelle:
1, 2
1, 2
1, 3

die duplicates entfernen in bezug auf alle spalten dann musst du einfach dein group by um die zusätzliche spalte erweitern


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: schnurzli am 15. Mai 2006, 13:30:09
also folgendes ist passiert:

ich habe in der datenbank etwa 30.000 einträge. da gibt es aber aufgrund eines bugs in der software, die auf die db zugreift, das problem, dass einige einträge dieselbe nummer haben(sagen wir mal es ist eine personalnummer) da aber jeder eine unique nummer hat, möchte ich nicht alle 30.000 einträge durchsehen sondern einfach mal die doppelten einträge anzeigen. wenn die vorhanden sind, kann ich ja dann weiter vorgehen...

nur hätte ich gerne die gesamte zeile ausgegeben, die eine doppelte personalnummer hat...


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: kavalier 90 am 04. März 2010, 22:00:35
ich notiere einfach mal folgende Lösung

Sofern Datensätze doppelt sind

SELECT deine tabelle
FROM table
GROUP BY deine tabelle
HAVING Count(*)>1

es werden alle doppelten datensätze ausgeworfen. markiere dann alle gehe auf löschen und einer bleibt stehen.


Titel: Re: SQL - doppelte Einträge ausgeben
Beitrag von: treFFnix am 20. Mai 2010, 14:38:15
SELECT deine tabelle
FROM table
GROUP BY deine tabelle
HAVING Count(*)>1


DAS ist genau das was hier gesucht wurde!!!!!!


Zitat
SELECT Spalte
FROM Tabelle
GROUP BY Spalte
HAVING Count(*)>1