Gleiche Datensätze in EINER Tabelle raussuchen

Kai-Behncke

Erfahrenes Mitglied
Hallo liebe Leute,
in meiner Tabelle (access) habe ich mehrere Spalten mit jeweils über 1000 Datensätzen.
In der Spalte "Email" möchte ich nun die Daten finden, wo sich die Emailadresse gleicht, also z.B.:
Mr.X X-Weg abc@web.de
Mr.Y Y-Weg abc@web.de

Ich weiß, dass ich auch die Daten sortieren kann und dann die doppelten Einträge manuell rausfischen, aber ich suche den mysql-Befehl, welcher mir die Datensätze mit jeweils gleichen Emailadressen rausspuckt.
Ich habe schon probiert: "SELECT * from Tabelle Where Email = Email", aber da gibt der natürlich alle Datensätze raus (also eben auch jene, wo die Emailadresse nur einmal
auftaucht).
Was könnte ich da machen?
 
Was isses denn nun? Access oder MySQL?

Zumindest in Access sollte es so funktionieren, bei MySQL gibt es Subqueries wohl nicht in allen Versionen:

SELECT * From Tabelle Where Email IN (
SELECT email
FROM Tabelle
GROUP BY email
HAVING Count (1) > 1
)
 
Wie kann man das mit einem zusätzlichen Parameter machen, z.B. noch zusätzlich Vornamen.

Das heißt ich vergleiche Datensätze nach Vorname und Email, ob diese Kombination häufiger vorkommt.

SELECT * From Tabelle Where Email IN (
SELECT email
FROM Tabelle
) AND
Vorname IN (
SELECT email
FROM Tabelle
)
Damit komme ich ja nichtg weit, weil ich dann für beide Felder immer übereinstimmungen kriege, aber nie für beide zusammen.
 
So sollte es gehen:

PHP:
SELECT * From Tabelle Where Email AND Vorname IN (
SELECT email, vorname
FROM Tabelle
)
 
Und das hier:
(die WHERE-Klausel einfach nochmal einklammern)

PHP:
SELECT * From Tabelle Where (Email IN (
SELECT email
FROM Tabelle
) AND
Vorname IN (
SELECT email
FROM Tabelle
))
 
Hallo,

du kannst nach jeder Spalte gruppieren, aber auch nach mehreren.

SQL:
select vorname,
       email,
       COUNT(*) AS anzahl
  from tabelle 
 group by vorname,email 
having count(*) > 1

Wenn du eine Subquery machen möchtest, die mehrere Spalten zurückliefert, wäre die Syntax die folgende:

SQL:
select * 
  FROM tabelle 
 WHERE (vorname,email) IN
      select vorname,email 
        from tabelle 
       group by vorname,email 
      having COUNT(*)>1)

wobei du hier natürlich wieder Duplikate hast

hoffe es hilft,
Markus
 
Hi,

wie wäre es damit:

SQL:
select * from tabelle t where t.email in (
  select email from
    (
      select count(*) as anzahl, email from tabelle group by email
    )
    where anzahl > 1)

Also im Prinzip holst Du Dir erst die emails, die mehr als einen Eintrag haben (denn nur dann kann es ja Duplikate geben) und im obersten Select holst Du alle Datensätze, die eben diese emails enthalten.

Das ganze ist jetzt nicht getestet, aber sollte eigentlich funktionieren.
 
Zurück