Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SQL-Statement vereinfachen (https://www.delphipraxis.net/115258-sql-statement-vereinfachen.html)

Angel4585 9. Jun 2008 12:59


SQL-Statement vereinfachen
 
Hallo,

ich habe ein SQL-Statement bei welchem sich die Anwendung komplett aufhängt:

SQL-Code:
select distinct(emailadresse) from freischaltungen where length(trim(emailadresse))>0 and produkt in ("P1","P2")and emailadresse not in(select emailadresse from freischaltungen where produkt not in ("P1","P2"))
bei dem Subselect hängt er, ich vermute die DB muss da viel arbeiten.
Die Frage ist jetzt, wie vereinfach ich das am Besten?

mkinzler 9. Jun 2008 13:05

Re: SQL-Statement vereinfachen
 
Welches DBMS?
Versuch es mal mit einem Join
BTw. Warum schreibst du nicht in der Datenbank-Sparte?

Angel4585 9. Jun 2008 13:07

Re: SQL-Statement vereinfachen
 
Zitat:

Zitat von mkinzler
BTw. Warum schreibst du nicht in der Datenbank-Sparte?

Huch :shock: dachte ich hätts dort gepostet

DBMS: MySQL.
Ein Join? Wie sollte der hier aussehen?

Also was ich eig erreichen will:

Ich hab eine Tabelle mit Freischaltcodes in der unter anderem die Emailadresse und das Produkt drinstehn.
Nun möchte ich alle Emailadressen die Produkt 1 und Produkt 2 haben, ausser denen die zusätzlich eines der anderen Produkte haben.

DeddyH 9. Jun 2008 13:19

Re: SQL-Statement vereinfachen
 
Evtl. so?
SQL-Code:
SELECT DISTINCT(A.emailadresse)
FROM freischaltungen A
LEFT JOIN freischaltungen B ON B.emailadresse = A.emailadresse
AND B.produkt NOT IN ("P1","P2")
WHERE A.produkt IN ("P1","P2")
AND B.emailadresse IS NULL

Angel4585 9. Jun 2008 13:28

Re: SQL-Statement vereinfachen
 
Ich hab jetzt so ein Statement mit join, welches mir allerdings gerademal ein siebtel der Ergebnisse der Abfrage von davor liefert :gruebel:
Ist jedoch deutlich schneller als die Abfrage zuvor.

SQL-Code:
select emailadresse from freischaltungen as f1 inner join freischaltungen as f2 on f2.emailadresse = f1.emailadresse where f1.id <> f2.id and f1.produkt in ("P1","P2") and f2.produkt not in("P1","P2")

tomsel 9. Jun 2008 13:35

Re: SQL-Statement vereinfachen
 
Zitat:

Zitat von Angel4585
Ich hab jetzt so ein Statement mit join, welches mir allerdings gerademal ein siebtel der Ergebnisse der Abfrage von davor liefert :gruebel:
Ist jedoch deutlich schneller als die Abfrage zuvor.

SQL-Code:
select emailadresse from freischaltungen as f1 inner join freischaltungen as f2 on f2.emailadresse = f1.emailadresse where f1.id <> f2.id and f1.produkt in ("P1","P2") and f2.produkt not in("P1","P2")


Also, wenn ich mich richtig irre, liefert dir dein join ganu die Sätze, die du NICHT haben willst.

Angel4585 9. Jun 2008 13:41

Re: SQL-Statement vereinfachen
 
ach deswegen sind das so wenig :lol:
hmm.. also meinen denkfehler seh ich.. aber wie ich das amche das ich das gewünschte Ergebnis bekomme weis ich grad trotzdem net..

DeddyH 9. Jun 2008 13:58

Re: SQL-Statement vereinfachen
 
Schau mal hier.

mkinzler 9. Jun 2008 14:04

Re: SQL-Statement vereinfachen
 
Oder http://www.bitbybit.dk/carsten/blog/?p=71

omata 10. Jun 2008 01:24

Re: SQL-Statement vereinfachen
 
Versuch es doch mal so...

SQL-Code:
SELECT DISTINCT a.emailadresse
FROM freischaltungen a
LEFT JOIN (SELECT DISTINCT emailadresse
           FROM freischaltungen
           WHERE produkt NOT IN ('P1', 'P2')) b
  ON a.emailadresse = b.emailadresse
WHERE a.produkt IN ('P1', 'P2')
  AND b.emailadresse IS NULL
Gruss
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz