Seite 1 von 1

[MySQL] 2 Tabellen vergleichen...

Verfasst: 21.03.2009, 10:58
von JohnBi
Ich habe 2 Tabellen nennen wir die mal

Tabelle1: email_kunden (id, email) (1000 Datensätze)
Tabelle2: email_no_kunden (id_no, email_no) (6000 Datensätze)

nun möchte ich das alle email_kunden Datensätze aus email_no_kunden herausgefiltert werden und mir nurnoch email_no_kunden angezeigt werden ohne email_kunden.

Ich hoffe ich hab mich verständlich ausgedrückt.

JohnBi

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 21.03.2009, 11:00
von DanielS
Der Ansatz:

Code: Alles auswählen

select *
from email_no_kunden nk
where not exists (select * from email_kunden k where k.email = nk.email)

Verfasst: 21.03.2009, 11:02
von JohnBi
ok, ich kann das im Moment nicht prüfen, aber vielen Dank für den Ansatz ... werde mich melden sobald ich das umsetzen muss ...

Verfasst: 21.03.2009, 19:12
von Mork vom Ork
JohnBi hat geschrieben:Tabelle1: email_kunden (id, email) (1000 Datensätze)
Tabelle2: email_no_kunden (id_no, email_no) (6000 Datensätze)

nun möchte ich, dass alle email_kunden-Datensätze aus email_no_kunden herausgefiltert werden und mir nurnoch email_no_kunden angezeigt werden ohne email_kunden.
Mit join:
select * from no_kunden left join kunden on no_kunden.email=kunden.email where kunden.email is null;

Ohne join (möglicherweise schneller):
select * from no_kunden where email not in (select email from b)

Verfasst: 21.03.2009, 19:15
von DanielS
Mork vom Ork hat geschrieben:Mit join:
select * from no_kunden left join kunden on no_kunden.email=kunden.email where kunden.email is null;

Ohne join (möglicherweise schneller):
select * from no_kunden where email not in (select email from b)
Zu der Performance der ersten Abfrage mit join kann ich nichts sagen.
Aber eine Abfrage mit "not in" braucht länger als eine entsprechende Abfrage mit "not exists" (zumindest mit MS SQL konnte ich diese Erfahrung machen, bei MySQL wird es nicht viel anders sein).

Verfasst: 21.03.2009, 19:22
von Mork vom Ork
Das sollten auch nur Anregungen sein. Er kann ja mal alle drei ausmessen.

Verfasst: 21.03.2009, 19:30
von JohnBi
Danke vielmals für eure Antworten, um die Perfomance geht es mir nicht, da es nur einmal gemacht werden muss. Werde mal alle 3 testen und euch dann berichten welche Top war.

Verfasst: 21.03.2009, 19:40
von DanielS
Mork vom Ork hat geschrieben:Das sollten auch nur Anregungen sein. Er kann ja mal alle drei ausmessen.
Sollte auch keine Kritik sein. Wie gesagt, meine Aussagen beziehen sich eher auf MS SQL und außerdem führen viele Wege zum Ziel ;)

Verfasst: 21.03.2009, 22:43
von net(t)worker
DanielS hat geschrieben:Sollte auch keine Kritik sein. Wie gesagt, meine Aussagen beziehen sich eher auf MS SQL und außerdem führen viele Wege zum Ziel ;)
naja... wenn nicht mysql 5 oder neuer verwendet wird, führt nur der join zum ziel... die älteren Versionen unterstützen keine subquery... :wink:

auch kann man die Queryzeiten für einzelne Abfragen nicht zwischen komplett verschiedenen DB Systemen vergleichen.. selbst bei unterschiedlichen mysql Versionen gibt es dort teilweise beachtliche unterschiede...

Verfasst: 22.03.2009, 12:46
von DanielS
net(t)worker hat geschrieben:auch kann man die Queryzeiten für einzelne Abfragen nicht zwischen komplett verschiedenen DB Systemen vergleichen.. selbst bei unterschiedlichen mysql Versionen gibt es dort teilweise beachtliche unterschiede...
Deswegen ja auch meine Betonung auf "meine Aussagen beziehen sich eher auf MS SQL" ;)

Verfasst: 29.03.2009, 10:51
von JohnBi
Mork vom Ork hat geschrieben: Mit join:
select * from no_kunden left join kunden on no_kunden.email=kunden.email where kunden.email is null;
Danke Mork, die Version hat super geklappt.