Hallo Daniel,
Du hast zwar das verwendete Datenbankmanagementsystem nicht angegeben und eine Deiner letzten Anfragen bezog sich auf Oracle, aber
Tabelle: Nutzer
Felder: ID, Name, Vorname, Ort, Telefon, eMail
Beispieldaten:
1, Meier, Daniel, Homburg, 1234, md@mail.de
2, Werner, Thorben, München, 4321, wt@mail.de
3, Kind, Thomas, Dortmund, 3242, kt@mail.de
4, Winter, Daniel, Bremen, 7823, wd@mail.de
5, Winter, Marina, Wilhelmshaven, 3465, wm@mail.de
6, Albert, Tim, Leipzig, 5231, at@mail.de
7, Albert, Tim, Leipzig, 5231, at2@mail.de
sowas wie die nächsten beiden Statements:
$sql = "select count(*), Name, Vorname, Ort, Telefon, eMail from Nutzer group by Name having count(*) > 1";
$sql = "select count(*), Name, Vorname, Ort, Telefon, eMail from Nutzer group by Vorname having count(*) > 1";
akzeptiert außer MySQL kein mir bekanntes Datenbankmanagementsystem. Alle anderen weisen diese Abfragen als syntaktisch falsch zurück, weil Du nicht nach allen Spalten, die _keine_ Aggregatsfunktion enthalten gruppiert hast.
1.) Beide SQL-Anweisungen bringen bei "count()" eine 2, dennoch wird nur ein Datensatz angezeigt. Wo ist mein Fehler, wie kann ich das beheben?
Was bitte wäre Dein gewünschtes Ergebnis?
Erste Abfrage, Prüfung auf doppelte Familiennamen:
SELECT
Name,
COUNT(*)
FROM Nutzer
GROUP BY Name
HAVING COUNT(*) > 1
sollte zwei Datensätze zurückliefern:
Name COUNT(*)
----------------
Winter 2
Albert 2
2.) ID 6 und 7 sind Name und Vorname gleich. Wie lautet so eine SQL-Anweisung, wenn ich Name und Vorname auf Gleichheit prüfen will?
SELECT
Name,
Vorname,
COUNT(*)
FROM Nutzer
GROUP BY
Name,
Vorname
HAVING COUNT(*) > 1
liefert die Datensätze
Name Vorname COUNT(*)
----------------------
Albert Tim 2
Es ist überhaupt keine gute Idee, Spalten mitzunehmen, nach denen man _nicht_ gruppiert (oder gar nicht gruppieren kann):
Verwendet man kein MySQL, so erhält man ziemlich sicher eine Fehlermeldung
Verwendet man MySQL - und der Inhalt dieser Spalten ist bei den einzelnen Datensätzen unterschiedlich, so erhält man zufällige Ergebnisse in diesen Spalten.
Möchtest Du etwa alle Daten aller Nutzer haben, deren Name mehr als einmal vorkommt? Dann sage dies bitte auch. Es ist eine sehr gute Idee, die gewünschte Ergebnismenge anzugeben - am besten mit einer Klartextbegründung, warum man genau diese Datensätze haben möchte, z.B:
Gewünschtes Ergebnis:
4, Winter, Daniel, Bremen, 7823, wd@mail.de
5, Winter, Marina, Wilhelmshaven, 3465, wm@mail.de
6, Albert, Tim, Leipzig, 5231, at@mail.de
7, Albert, Tim, Leipzig, 5231, at2@mail.de
weil die Familennamen "Winter" und "Albert" doppelt vorkommen.
Freundliche Grüße und mit der Bitte um eine konkretere Problembeschreibung
Vinzenz