Hilfe bei einer abfrage

toady

Benutzer
Beiträge
5
Hey ich hoffe mir kann hier jemand helfen.

ich habe eine Tabelle mit :

Vorname | Nachname | Strasse | PLZ | Email

jetz will ich aber dass
er mir bei doppelten namen adresse strasse plz nur ausgibt wenn die email anders ist.


Also: - Vergleichen von 2 Datensätzen - Vorname, Nachname, PLZ und Strasse muss gleich sein
- Email muss verschieden sein

bräuchte mal ne idee wie ich das herraus finden kann und ne mysql syntax wäre cool



Gruß ToDi
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
284
Hallo toady,

habe ich das richtig verstanden, dass du eine Art Duplikats-Check machen möchtest?
Sollen denn alle Namen und Adressen nochmals ausgegeben werden oder möchtest du dann nur die Duplikate angezeigt bekommen?

Übrigens: MySQL-Syntax? Du hast aber gemerkt, dass du diese Frage im Bereich "Oracle" eingetütet hast? - Egal - meine Syntax ist dafür MS-SQL (damit wir dann auch fast alles durchhaben -vlt. kann akretschmer ja auch noch die Sytax für PostgreSQL beisteuern :D)

Ausgabe von doppelten Namen und Adressen mit gleicher Mailadresse:

Code:
SELECT *
FROM tabelle T1
INNER JOIN (
SELECT Vorname, Nachname, Strasse, PLZ, Count(*) as Anzahl
FROM tabelle
GROUP BY Vorname, Nachname, Strasse, PLZ
HAVING Count(*)>1) T2
ON T1.Vorname=T2,Vorname
AND T1.Nachname=T2.Nachname
AND T1.Strasse=T2.Strasse
AND T1.PLZ=T2.PLZ
ORDER BY Vorname, Nachname, Strasse, PLZ

Viele Grüße,
Tommi
 

toady

Benutzer
Beiträge
5
Ja habe ich leider zuspät gemerkt dass, ich im falschen Bereich bin aber trozdem danke für die schnelle Hilfe.
 

toady

Benutzer
Beiträge
5
Ich Stolpere grade über "HAVING" kann du mir vlt genau erklären was das macht ich vermute es ist eine Bedingung aber wiegesagt ich vermute nur :D



und ich will das er mir nur die namen asugibt wenn dei em-mail verschieden ist.
 

Tommi

Datenbank-Guru
Beiträge
284
Hi toady,

der Ausdruck HAVING wird im SQL-Server nur im Zusammenhang mit einem GROUP BY genutzt und hat die gleiche Funktion wie die WHERE-Klausel,
nur dass dder Ausdruck sich auf eine Aggregatfunktion und nicht auf einen Vergleich der einzelnen Datensätze bezieht.

Viele Grüße,
Tommi
 

ukulele

Datenbank-Guru
Beiträge
4.394
Theoretisch sollte das auch mit DISTINCT gehen, solange du keine weiteren komplexere Bedingungen hast (z.B. einen count() verwenden möchtest). Du solltest dann aber nicht mit * sondern mit Spaltennamen arbeiten.
Code:
SELECT DISTINCT
Vorname,
Nachname,
Strasse,
PLZ,
Email
FROM tabelle
 

toady

Benutzer
Beiträge
5
Am besten ist schildere mal mein vorhaben.

Angenommen:Ich habe eine Tabelle mit 1 Mio Kunden.


3 Kunden davon Heissen Max Mustermann 1 wohnt in Norwegen und 2 wohnen in Deutschland jetz will ich das er mir das auflistet das es ihn 2 mal in Deutschland gibt.

Das Problem an der sache ist ich kenne den namen aber Vorher nicht von den leuten ich will das er mir die Automatisch rausfiltert.


Ich hoffe ich konnte mein Problem jetz etwas besser Schildern Die antworten vorher waren auch top um das mit der Email adresse zu lösen.


@Ukulele mit DISTINCT komme ich da leider nicht weit :(


Bitte nochmal um schnelle Hilfe
 

ukulele

Datenbank-Guru
Beiträge
4.394
Das stimmt, DISTINCT geht nur um keine Daten doppelt auszugeben. Zum zählen musst du, wie durch Tommi beschrieben, mit GROUP BY arbeiten. Das sieht aber eigentlich gut aus...
 
Werbung:

toady

Benutzer
Beiträge
5
Code:
SELECT p1.Vorname, p1.Nachname
FROM Tabelle1 p1
INNER JOIN (
    SELECT Vorname, Count(*) as Anzahl FROM Tabelle1 p2 GROUP BY
Vorname HAVING Count(*)>1
)
p2 ON p1.Vorname=p2.Vorname ORDER BY p1.Vorname
 
Oben