ACCESS Suche



  • Queryschreiber schrieb:

    Falls ich dein Problem richtig verstanden habe, wieso machst du es nicht einfach mit 3 INNER JOINs?

    Das Problem ist es können beliebig viele Länder durchsucht werden.
    Soll ich erst überprüfen wie viele in die Listbox eingetragen wurden und dan in einer Schleife abfragen ?

    Gruss Sheldor



  • Queryschreiber schrieb:

    SELECT
    	*
    FROM
    	tblKunde k
    	INNER JOIN tblKundeLand kl1 ON k.kundeID = kl1.kundeID AND kl1.kulaLandID = 1
    	INNER JOIN tblKundeLand kl2 ON k.kundeID = kl2.kundeID AND kl1.kulaLandID = 2
    	INNER JOIN tblKundeLand kl3 ON k.kundeID = kl3.kundeID AND kl1.kulaLandID = 3
    

    😕

    SELECT * FROM tblKunde k
    INNER JOIN tblKundeLand kl ON k.kundeID = kl.kundeID AND kl.kulaLandID IN ('1','2','3');
    

    VlG



  • Folgender Fehler wenn ich die Abfrage ausführe :

    Verknüpfungsausdruck nicht unterstützt.
    


  • was ist der fehler ?



  • hmmz schrieb:

    Queryschreiber schrieb:

    SELECT
    	*
    FROM
    	tblKunde k
    	INNER JOIN tblKundeLand kl1 ON k.kundeID = kl1.kundeID AND kl1.kulaLandID = 1
    	INNER JOIN tblKundeLand kl2 ON k.kundeID = kl2.kundeID AND kl1.kulaLandID = 2
    	INNER JOIN tblKundeLand kl3 ON k.kundeID = kl3.kundeID AND kl1.kulaLandID = 3
    

    😕

    SELECT * FROM tblKunde k
    INNER JOIN tblKundeLand kl ON k.kundeID = kl.kundeID AND kl.kulaLandID IN ('1','2','3');
    

    VlG

    Dann kriegst du aber auch wieder Kunden, die nur Land 1, Land 2 oder eine Kombination, aber nicht alle gewählt haben 🙄



  • Zu Faul zum einloggen schrieb:

    Das Problem ist es können beliebig viele Länder durchsucht werden.
    Soll ich erst überprüfen wie viele in die Listbox eingetragen wurden und dan in einer Schleife abfragen ?

    Gruss Sheldor

    Ja. Oder du machst es so:

    SELECT
    	COUNT(k.kundeID)
    FROM
    	tblKunde k
    	INNER JOIN tblKundeLand kl ON k.kundeID = kl.kulaKundeID AND kl.kulaLandID IN (1,2,3) /* Laender-IDs */
    GROUP BY
    	k.kundeID	
    HAVING
    	COUNT(k.kundeID) = 3 /* Anzahl an Laendern */
    

    Kanns net testen, also gibts natürlich keine Garantie auf Richtigkeit 😃



  • Wieso denn so umständlich?

    SELECT K.*, KL.* FROM tblKundeLand KL
    INNER JOIN tblKunde K ON (K.kundeID=KL.kulakundeID)
    WHERE KL.kulaLandID = 1 AND KL.kulaLandID = 2 AND KL.kulaLandID = 3;
    

    Wenn die Abfrage eh dynamisch ist, sollte es doch kein Problem sein, so ein paar AND's zusammen zu setzen!



  • hmmz|off schrieb:

    Wieso denn so umständlich?

    SELECT K.*, KL.* FROM tblKundeLand KL
    INNER JOIN tblKunde K ON (K.kundeID=KL.kulakundeID)
    WHERE KL.kulaLandID = 1 AND KL.kulaLandID = 2 AND KL.kulaLandID = 3;
    

    Wenn die Abfrage eh dynamisch ist, sollte es doch kein Problem sein, so ein paar AND's zusammen zu setzen!

    Das wird nichts zurückgeben, die Joins geben pro Datensatz in der Verknüpfungstabelle einen Datensatz verknüpft mit dem entsprechenden Kunden zurück. Danach prüfst du pro Zeile, ob die Land-ID gleichzeitig 1, 2 und 3 ist. Ein Wert kann aber nicht 3 Werte sein, also kommt nichts zurück.



  • Stimmt, hast Recht! Sorry



  • Wie sollte ich das den nun lösen ?
    Ist es überhaupt möglich ?



  • shelldor2 schrieb:

    Wie sollte ich das den nun lösen ?
    Ist es überhaupt möglich ?

    Auf Seite 1 wurden dir doch schon Lösungswege vorgeschlagen. Um eine Schleife, die dir das SQL-Statement generiert, wirst du nicht herumkommen, aber das ist ja auch nicht weiter schlimm.


Anmelden zum Antworten