Select für gleiche Inhalte
Tino
- datenbank
hallo
Ich möchte in einer Datenbank all jene Einträge aufrufen, die für einen bestimmten User in einer Spalte gleiche Inhalte haben. - quasi das Gegenteil von Distinct.
Beispiel:
ID Name Nummer
01 Hans 1
02 Klaus 1
03 Erna 1
04 Hans 1 <---
05 Hans 2
06 Klaus 2
07 Erna 2
als Ergebnis brauche ich dann die Zeilen 01 und 04
Also etwa :
SELECT * FROM tab WHERE Name = "Hans" AND doppelt
das Ende ist natürlich Quatsch! - wie mache ich das?
danke
hallo
das Ende ist natürlich Quatsch! - wie mache ich das?
Du meinst Pseudocode ;-)
Also mach Dich mal über GROUP BY und COUNT schlau. So in etwa: Abfrage gruppieren und die gruppierten Records zählen und dann die ausgeben wo mehr als oiner.
Gruss, Rolf
Hallo Rolf!
Also mach Dich mal über GROUP BY und COUNT schlau. So in etwa:
Abfrage gruppieren und die gruppierten Records zählen und dann
die ausgeben wo mehr als oiner.
Er will alle Einträge der Doppelten. Bei deinem Ansatz würde er _nur_ _eine_ ID der IDs/Einträge mit doppelten Namen und Nummer
Tino will also aus seiner angegebenen Tabelle folgende Einträge erhalten, wenn ich ihn richtig verstanden habe.
ID | Name | Nummer
------------------
01 | Hans | 1
04 | Hans | 1
Bei deinem Ansatz würder er nur einen von beiden Datensätzen als Ergebnis erhalten.
hi,
Also mach Dich mal über GROUP BY und COUNT schlau. So in etwa:
Abfrage gruppieren und die gruppierten Records zählen und dann
die ausgeben wo mehr als oiner.Er will alle Einträge der Doppelten. Bei deinem Ansatz würde er _nur_ _eine_ ID der IDs/Einträge mit doppelten Namen und Nummer
Stimmt! Wir ändern das Select so, dass alle gruppierten Records ausgegeben werden wo COUNT den Wert 2 ergibt. Und schon gehts ;-)
Gruss, Rolf
Hallo Rolf!
Also mach Dich mal über GROUP BY und COUNT schlau. So in etwa:
Abfrage gruppieren und die gruppierten Records zählen und dann
die ausgeben wo mehr als oiner.Er will alle Einträge der Doppelten. Bei deinem Ansatz würde
er _nur_ _eine_ ID der IDs/Einträge mit doppelten Namen und NummerStimmt! Wir ändern das Select so, dass alle gruppierten Records
ausgegeben werden wo COUNT den Wert 2 ergibt. Und schon gehts ;-)
Nein. Es gibt folgende Spalten: ID, Name und Nummer. Deine Lösung sehe wohl ansatzweise wie folgt aus:
SELECT COUNT(*) AS 'Anzahl'
FROM Tabelle
WHERE Tabelle.Name = 'Hans'
AND ?
GROUP BY Tabelle.Name
HAVING Anzahl = 2;
Und dann bzw. für "?"?... Oder verstehe ich dich falsch?
Meiner Meinung nach, kommt nur ein "self join" in Frage, wie ich es bereits in meinem vorherigen Posting beschrieben habe. Vielleicht ist das aber auch falsch?
Hallo Tino!
Ein "self join" könnte deine Lösung sein (Zumindest bei MySQL):
SELECT A.ID
FROM Tabelle A, Tabelle B
WHERE A.ID != B.ID
AND A.Nummer = B.Nummer
AND A.Name = B.Name
AND A.Name = 'Hans'
GROUP BY A.ID;
Ich hoffe, ich habe kein Denkfehler. Ob es so funktioniert, kann ich dir leider nicht garantieren.
PS.: Als Prävention vor Doppeleinträge, setze einen UNIQUE-Index
über beide Spalten (Name und Nummer).
Besten Dank!
hat funktioniert.
habe die tabelle kopiert und dann das angepasste select durchgeführt.
Das Problem hat sich ganz am anfang durch meine Ahnungslosigkeit eingeschlichen. - User konnten einträge doppelt machen wenn nicht aufgepasst wurde. Das kann ich natürlich schon vorher abfangen.
Aber es waren natürlich einige doppelte Einträge vorhanden.
also nochmals vielen Dank
Tino
habe die tabelle kopiert und dann das angepasste select
durchgeführt.
Wieso hast du die Tabelle kopiert? Du hast es dir wahrscheinlich umständlicher gemacht, als nötig bzw. mein Posting falsch verstanden.
Kopieren der Tabelle wäre nämlich nicht nötig gewesen, da meine SQL-Query die Tabelle mit _sich_ _selbst_ verknüpft. Dies nennt man "self join".
Wenn du die Tabelle kopierst und dann beide Tabellen miteinander verknüpfst, ist es ein normaler "Join".
Aber Hauptsache, es hat funktioniert! ;-)