Das Gegenteil von Distinct --> so ähnlich
B. Hopf
- datenbank
Hallo!
Ich habe ein Problem mit einer SQL-Abfrage.
Hier ein Beispiel:
ID | Name | Vorname
1 Maier Hans
2 Müller Franz
3 Schröder Sepp
4 Müller Hans
5 Borsig Ferdl
6 Mayer Tom
7 Becker Heinz
8 Müller Franz
9 Biersack Chris
10 Borsig Ferdl
So, nun möchte ich alle Datensätze, die im Feld Name und im Feld Vorname gleich sind.
Also folgende Ausgabe:
ID | Name | Vorname
2 Müller Franz
8 Müller Franz
5 Borsig Ferdl
10 Borsig Ferdl
Mit GROUP BY bekomme ich es hin, alle angezeigt zu bekommen, die gleich sind, aber nicht die restlichen Datensätze:
Also:
ID | Name | Vorname
2 Müller Franz
5 Borsig Ferdl
Wie bekomme ich also ans Ziel?
Probiere jetzt schon ewig rum!
Danke für die Antwort.
B. Hopf
SELECT count(id) as idcount,name,vorname from tabelle group by name,vorname having idcount > 1 order by idcount desc
diese abfrage gibt dir zumindest als idcount die anzahl der gleichen einträge absteigend sortiert aus !
vielleicht hilft das schon mal !?
gruß , frank
Danke für die Antwort.
B. Hopf
SELECT count(id) as idcount,name,vorname from tabelle group by name,vorname having idcount > 1 order by idcount desc
Vielen Dank!
So habe ich es auch, leider bekomme ich noch nicht die einzelnen Datensätze.
Ich werde wohl auf dieses SQL aufbauen.
Herzlichen Dank!
diese abfrage gibt dir zumindest als idcount die anzahl der gleichen einträge absteigend sortiert aus !
vielleicht hilft das schon mal !?
gruß , frank
Hi, hallo
Mit GROUP BY bekomme ich es hin, alle angezeigt zu bekommen, die gleich sind, aber nicht die restlichen Datensätze:
Also:
ID | Name | Vorname
2 Müller Franz
5 Borsig Ferdl
Diese Ansicht unter Verwendung von Group-By dürfte man imho nicht erhalten. Aggregatsklauseln müssen auf alle angezuzeigenden Felder angewendet werden und wenn du nach ID gruppierst solltest du quasi alle Datensätze geliefert bekommen.
MS Access bietet einen Duplikatassistenten an, der baut sich eine entsprechende Abfrage selbst zusammen und gibt ein vielleicht für dich nutzbares Ergebnis.
Tschau, tschüß,
Frank
Hallo,
Mit GROUP BY bekomme ich es hin, alle angezeigt zu bekommen, die gleich sind, aber nicht die restlichen Datensätze:
Also:
ID | Name | Vorname
2 Müller Franz
5 Borsig FerdlDiese Ansicht unter Verwendung von Group-By dürfte man imho nicht erhalten. Aggregatsklauseln müssen auf alle angezuzeigenden Felder angewendet werden,
die nicht innerhalb einer Funktion über die Gruppe verrechnet sind ;-))
First() ist so eine Funktion.
SELECT First(Tabelle1.ID) AS ID, Name, Vorname
FROM Tabelle1
GROUP BY Name, Vorname
HAVING Count(Name)>1
ORDER BY First(Tabelle1.ID)
viele Grüße
Axel
Halihallo Axel
Diese Ansicht unter Verwendung von Group-By dürfte man imho nicht erhalten. Aggregatsklauseln müssen auf alle angezuzeigenden Felder angewendet werden,
die nicht innerhalb einer Funktion über die Gruppe verrechnet sind ;-))
... oder selber Teil der GROUP BY-Klausel sind ;-))
Viele Grüsse
Philipp
Hallo!
Mit GROUP BY bekomme ich es hin, alle angezeigt zu bekommen, die gleich sind, aber nicht die restlichen Datensätze:
Ja, IMHO funktioniert das so nicht, weder mit distinct, noch mit group by. Es ginge mit einem subselect, aber das geht nicht mit den aktuell verwendeten MySQL-Versionen.
Meiner Ansicht nach ist das Problem aber nicht die Funktionalität von (My)SQL, sonden das Datenbank-Design. In einer relationalen Datenbank sollte man solche Probleme eigentlich nicht haben - daher gibt es auch keine entsprechenden Möglichkeiten. Warum gibt es Leute mit gleichem Namen und unterschiedlicher ID in der Datenbank? Und wieso willst Du gleiche Namen mehrfach ausgeben? Vielleicht sollte man eher da ansetzen.
Und sonst braucht man in MySQL wohl 2 Abfragen, mit der ersten würde ich mir mit so einer GROUP BY Abfrage eine temporäre Tabelle erstellen(CREATE TEMPORARY TABLE... SELECT... GROUP BY... : http://www.mysql.com/doc/de/CREATE_TABLE.html), mit der 2. würde ich diese temp. Tabelle mit der eigentlichen Tabelle über Namen und Vornamen verknüpfen(JOIN) und dann alle IDs auslesen. Die temporäre Tabelle wird nach Ende des Scriptes verworfen. Wenn die Daten nicht besonders viele sind würde ich eine temp. HEAP-Tabelle verwenden da die nur im Speicher erstellt wird.
Grüße
Andreas