Vinzenz Mai: Tabellenfelder vergleichen

Beitrag lesen

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