Datenbank Logik MySQL

emmis

Grünschnabel
Ich habe da ein kleines logisches Problem mit der Abfrage:

Ausgangspunkt sind 2 Tabellen
KUNDETAB enthält 5 mögliche EMailadressen
POSTTAB enthält 1 EMailadresse

... soo, nun wollte ich alle EMailadresse aus POSTTAB, die in keinem der jeweils 5 EMail-Felder in KUNDENTAB vorkommen herausholen und habe folgendes versucht (auch mit where-...). Nach reichlichem Üblegen (schlaflos in Schladming) ist mir schon klar geworden, dass es so nicht funktioniert, da es POSTTAB.email_adresse auch ausgibt wenn es vorhanden ist, da ja Zielen vorhanden sind, in denen es tatsächlich nicht vorkommt.

PHP:
SELECT * FROM POSTTAB LEFT JOIN (KUNDETAB) ON 
(KUNDETAB.email<>POSTTAB.email_adresse
 and KUNDETAB.email1<>POSTTAB.email_adresse
 and KUNDETAB.email2<>POSTTAB.email_adresse
 and KUNDETAB.email3<>POSTTAB.email_adresse
 and KUNDETAB.email4<>POSTTAB.email_adresse) GROUP BY POSTTAB.email_adresse

Also HILFE!!
 
Ich glaube du müsstest hier einen Sub Select anwenden.

Im 1. Select suchst du dir die e-mailaddresse aus POSTTAB raus und im Sub Select vergleichst du diese dann mit denen die in der KUNDETAB sind.

Ist einfach ein Vorschlag von mir hoffe dieser kann helfen.
 
Ist zwar nicht die eleganteste Lösung die ich dir hier vorschlage, aber auf die Schnelle fällt mir nichts besseres ein. Versuche es mal hiermit:

PHP:
 SELECT * FROM POSTTAB WHERE
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email1 FROM KUNDETAB) AND
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email2 FROM KUNDETAB) AND
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email3 FROM KUNDETAB) AND
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email4 FROM KUNDETAB)

Gruss
ZeroEnna
 
Hi!

Bitte nicht schlagen, wenn's totaler Blödsinn ist ;)
Code:
SELECT POSTTAB.email
FROM POSTTAB
LEFT JOIN KUNDETAB ON ( POSTTAB.email = KUNDETAB.email ) 
WHERE KUNDETAB.email IS NULL

Liebe Grüße,
Mark.
 
Ist zwar nicht die eleganteste Lösung die ich dir hier vorschlage, aber auf die Schnelle fällt mir nichts besseres ein. Versuche es mal hiermit:

PHP:
 SELECT * FROM POSTTAB WHERE
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email1 FROM KUNDETAB) AND
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email2 FROM KUNDETAB) AND
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email3 FROM KUNDETAB) AND
POSTTAB.email_adresse NOT IN (SELECT KUNDETAB.email4 FROM KUNDETAB)

Gruss
ZeroEnna


nein, leider ist es das auch nicht ... habe die gleiche ergebnismenge wie bei meinem select-statement ... ist auch klar, denn wenn es auch nur einen Datensatz in KUNDENTAB gibt, bei dem eine EmailAdresse A nicht vorhanden ist, wird die EmailAdresse A als Ergebnis geliefert, auch wenn sie in einem anderen Datensatz in KUNDENTAB vorhanden ist.
 
Hi!

Urgs, schlagt mich doch! ;) ...erst im Zitat gesehen, daß die fünf eMail-Adressen zu einer Zeile gehören :rolleyes:
Und um es noch schlimmer zu machen, probiere ich es einfach noch einmal:
Code:
SELECT POSTTAB.email
FROM POSTTAB
LEFT JOIN KUNDETAB ON (
    POSTTAB.email = KUNDETAB.email1 OR
    POSTTAB.email = KUNDETAB.email2 OR
    POSTTAB.email = KUNDETAB email3 OR
    POSTTAB.email = KUNDETAB email4 OR
    POSTTAB.email = KUNDETAB email5) 
WHERE KUNDETAB.id IS NULL
Liebe Grüße,
Mark.
 
Zurück