SQL: alle doppelten einträge ausgeben
janosch
- datenbank
die doppelten einträge (name und mail gleich) will ich untereinander anzeigen lassen:
so solls aussehen:
*******************************
Max Mustermann kontrollieren!!!
Max Mustermann kontrollieren!!!
Petra Klein kontrollieren!!!
Petra Klein kontrollieren!!!
...
*******************************
hab jetzt mal das geprogged. leider kommt ein mist raus. wirre einträge woran kann das liegen?
$q = mysql_query ("SELECT one.name FROM $k_table AS one, $k_table AS two WHERE one.mail = two.mail;");
while (list($name) = mysql_fetch_array($q)){echo "$name kontrollieren!!! <br>"; }
die andere möglichkeit mit "group by" und "having" habe ich nicht verstanden.
janosch
yo,
SELECT name, mail
FROM tabelle
GROUP BY name
HAVING count(name) > 1;
Ilja
yo
kleiner fehler, muss sein
SELECT name, mail
FROM tabelle
GROUP BY name, mail
HAVING count(name) > 1;
funktioniert bestens. habe endlich verstanden. kann ich trotzdem alle doppelten 2 mal anzeigen lassen:
Max Geiger
Max Geiger
Peter Hutsch
Peter Hutsch
...
denn dann kann ich besse die tabellen vergleichen und auswerten, welche ich davon löschen will. danke. janosch
yo,
funktioniert bestens. habe endlich verstanden. kann ich trotzdem alle doppelten 2 mal anzeigen lassen:
ist das eine frage ? ;-)
denn dann kann ich besse die tabellen vergleichen und auswerten, welche ich davon löschen will.
es handelt sich ja um eine tabelle und nicht um zwei. insofern bin ich mir nicht ganz sicher, was du meinst. aber du kannst dir anzeigen lassen, wie oft die gleiche name/email kombination vorkommt. dazu fügst du zusätzlich zu den spalten name und email nach der SELECT Klausel noche eine spalte count(name) hinzu.
ich bin mir aber nicht, ob ich deine frag verstanden habe.
Ilja
ich bin mir aber nicht, ob ich deine frag verstanden habe.
hallo Ilja,
so will ich die doppelten gelistet haben:
Ausgabe:_______________________________________
Cottbus Yvonne 08.11.2003 96524 1068308117 Ja
Cottbus Yvonne 18.12.2003 96524 1071745840 Ja
_______________________________________________
mit deiner variante kommt es so raus:
Ausgabe:_______________________________________
Cottbus Yvonne 08.11.2003 96524 1068308117 Ja
_______________________________________________
da kann ich aber das datum der beiden einträge nicht vergleichen und das ist entscheidend hier. denn ich will einen datensatz davon löschen. am liebsten würde ich beide zu einem zusammenfassen und neu in die DB reinschreiben aber das ist bestimmt richtig verzwickt umzusetzen.
janosch
Vielleicht so?
SELECT name, mail
FROM tabelle
WHERE name IN (
SELECT name
FROM tabelle
GROUP BY name
HAVING count(name) > 1
);
Gruss,
Daniel
yo,
unterabfragen ist schon der ein richtiger weg, aber nicht alle dbms können das. deshalb muss man wohl über zwei abfragen oder joins gehen, was auch performance vorteile bringt.
SELECT tab1.id tab.1name, tab1.mail, tab1.datum...
FROM tabelle as tab1, tabelle as tab2
WHERE tab1.name=tab2.name
AND tab1.id <> tab2id;
versuch das mal, bin mir aber selbst nicht icher, ob das geht.
Ilja
geht hier nicht. evtl unterstützt das meine DB net.
janosch
bekommst du einen syntaxfehler oder die flache datenmenge ? und wenn ein syntaxfehler, welche meldung den und welche dbms benutzt du ?
Ilja