[SQL allgemein] Ausschluss

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [SQL allgemein] Ausschluss

    Hallo zusammen,

    ich stehe vor einem Problem, wo ich ohne Hilfe nicht mehr weiter komme.

    Es gibt drei simple Tabellen:
    Kunde: KDNR, KDNAME
    Auftraege: AUFTRNR, KDNR
    Auftragspositionen: AUFTRNR, MATNR

    Für eine Werbeaktion sollen alle Kunden herausgefunden werden, die bisher die Materialien 123 und 234 noch nicht bestellt haben.

    Ich wäre für Hilfe echt dankbar.

  • #2
    PHP-Code:
    SELECT kdnrkdname FROM kunde 
    LEFT JOIN auftraege USING
    (kdnr
    LEFT JOIN positionen ON positionen.auftrnr auftraege.auftrnr AND (matnr 123 OR matnr 234)
    WHERE positionen.auftrnr IS NULL 
    (ungetestet)
    ich glaube

    Kommentar


    • #3
      Danke für die schnelle Antwort; ist es aber noch nicht ganz.

      Es werden die Kunden ausgeschlossen, die schon andere Materialien gekauft haben aber nicht diese beiden.

      Ich versuche gerade zuerst alle Kunden herauszubekommen die diese Materialen gekauft haben, da die das Anschreiben nicht benötigen die versuche ich dann gegen den Kundenstamm abzuziehen mit EXISTS und NOT EXSITS in der WHERE-CLAUSEL, haut aber auch noch nicht ganz hin.

      Bin für weiter Ideen offen

      Kommentar


      • #4
        Versuchs mal in die Richtung:
        Code:
        SELECT k.kdnr, k.kdname 
        FROM kunde k
        LEFT JOIN auftraege a USING(kdnr) 
        WHERE NOT EXISTS (
        	SELECT p.auftrnr
        		FROM position p
        		WHERE p.auftrnr = a.auftrnr
        		  AND p.matnr NOT IN (123, 234)
        )
        EDIT:
        Ich glaube, das Folgende ist besser:
        Code:
        SELECT k.kdnr, k.kdname 
        FROM kunde k
        WHERE k.kdnr NOT IN (
        	SELECT p.auftrnr
        		FROM auftraege a 
        		INNER JOIN position p USING(auftrnr)
        		WHERE p.matnr NOT IN (123, 234)
        )

        Zuletzt geändert von H2O; 30.11.2007, 14:22.
        Gruss
        H2O

        Kommentar


        • #5
          Und wenn man das NOT IN noch als LEFT JOIN schreibt dürfte es nochmal schneller werden. MySQL hats nicht so mit den Sub-Queries~

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Der liefert das richtige Ergebnis:

            SELECT DISTINCT t1.kdnr, kdname
            FROM kunde as t1
            WHERE
            NOT EXISTS (SELECT t2.kdnr FROM kunde as t2 LEFT JOIN auftraege using(kdnr) LEFT JOIN position as t3 using (auftrnr) WHERE t1.kdnr = t2.kdnr AND (t3.matnr = ‘123’ OR t3.matnr = ‘234’))
            )
            order by kdnr



            Vielen Dank für Eure Tipps und Hilfestellungen!

            Kommentar

            Lädt...
            X