2017-07-24 2 views
-3

Ich habe unter Abfrage, Kunden Abonnement zu überprüfen. Dies ist in der Abfrage nicht ganz richtig, aber ich weiß nicht, wie ich sie optimieren oder korrigieren kann. Hier ist es.MySQL Query in schlechter Weise

SELECT sub_id FROM subscription 
WHERE start_date = CURDATE() 
AND end_date > CURDATE() 
AND sub_id NOT IN (SELECT DISTINCT sub_id FROM subscription 
WHERE start_date < CURDATE()); 

Der Grund der Unterabfrage ist, Sub_id herauszufiltern, hat vorher mindestens ein Abonnement getan.

+0

Ich habe fast keine Erfahrung in MySQL, aber Ihre Syntax sieht aus wie Sie im Wesentlichen die gleiche WHERE-Klausel zweimal tun. In Ihrem main eliminieren Sie bereits Datensätze mit start_date <> CURDATE(); Warum haben Sie eine Unterabfrage, die - im Wesentlichen - alle bereits in Ihrer Hauptabfrage eliminierten Datensätze eliminiert? – John

+0

auf der Suche nach neuen Kunden. "WHERE Startdatum CPMM

+1

Ich denke, Sie haben doppelte Bedingung, 'where start_date = CURDATE()' bereits erhalten die Sub-ID, die in CURDATE() gestartet, und Sie brauchen keine Unterabfrage 'AND sub_id NICHT IN (SELECT DISTINCT Sub_ID FROM Abonnement WHERE Startdatum ProgrammingBaKa

Antwort

1

Sie benötigen keine SELECT DISTINCT sub_id FROM subscription WHERE start_date < CURDATE() Unterabfrage - Sie haben bereits die Bedingung start_date = CURDATE().

SELECT sub_id FROM subscription 
WHERE start_date = CURDATE() 
    AND end_date > CURDATE() 

Diese Abfrage wird alle Abonnements auswählen, die auf CURDATE() und stoppen an einem anderen Tag in die Zukunft starten.