[MySQL 3.23.X] JOIN mit NOT EXISTS Abfrage

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

  • [MySQL 3.23.X] JOIN mit NOT EXISTS Abfrage

    Hallo,

    nach ner langen Nacht steh ich immer noch aufm Schlauch, hier meine Frage:

    ich habe 3 Tabellen:

    tblKunde
    ---------------
    KundenNr
    Name


    tblGruppe
    ---------------
    GruppenNr
    GruppenName


    tblGruppeAbo
    ---------------
    Key
    KundenNr
    GruppenNr

    Soweit so gut, ich kann zwar mit u.g. SQL Anweisung abfragen wer in der jeweiligen Gruppe ist, aber ich hätte das ganze gerne umgekehrt, d.h. zu einer bestimmten Gruppe möchte ich gerne alle Kunden, die nicht in der Gruppe sind. Wäre nett, wenn ihr mir helfen könntet, is bestimmt ned so schwer!

    Hier die SQL Anweisung

    SELECT tblKunde.KundenNr, tblKunde.Name
    FROM tblKunde
    INNER JOIN tblGruppeAbo
    ON(tblKunde.KundenNr= tblGruppeAbo.KundenNr)
    WHERE tblGruppeAbo.GroupID = '500001'
    ORDER BY KundenNr

    Danke für die Antworten, Sebastian

  • #2
    WHERE tblGruppeAbo.GroupID != '500001'

    musst es halt nur nochmal mit mit einem "!" BETONEN, dass du sie nicht haben willst, sonst glaubt dir die db das nicht
    Zuletzt geändert von graf; 26.06.2003, 10:46.

    Kommentar


    • #3
      Hi,

      das habe ich auch schon ausprobiert, funktioniert aber leider nicht, da ich dann nicht die Kunden bekomme, die in gar keiner Gruppe sind, sprich also gar nicht in der tblGruppeAbo vorkommen

      MfG Sebastian

      Kommentar


      • #4
        ja, weil du die tabelle gar nicht in der abfrage drin hast, die sind zwar untereinander verknüpft, aber diese verknüpfung hast du in deiner abfrage einfach unterschlagen.
        bau mal noch einen 2ten join ein, dann wäre es perfekt ... oder erweitere deine where bedingung mit
        kundentabelle.gruppennummer IS NOT NULL (oder was da auch sonst drin steht)
        Zuletzt geändert von graf; 26.06.2003, 10:52.

        Kommentar


        • #5
          Original geschrieben von Seppel2000
          Hi,

          das habe ich auch schon ausprobiert, funktioniert aber leider nicht, da ich dann nicht die Kunden bekomme, die in gar keiner Gruppe sind, sprich also gar nicht in der tblGruppeAbo vorkommen

          MfG Sebastian
          mit fällt gerade auf, wenn da welche drin sein können, die in den abos nicht vorkommen, dann hast du zwar eine schöne tabellen struktur in normalform , aber machst unsinnige einträge.
          wenn ich mir so die struktur anschaue, dann DARF in tblKunde nichts stehten, was nicht auch in tblGruppenAbo steht, denn DAS ist deine Basistabelle, die beiden andern enthalten stammdaten ...
          Stammdaten mit nicht existieren einträgen verknüpfen zu wollen, ist ein widerspruch ansich. dann wären es keine stammdaten.
          wenn es aber keine stammdaten sein sollen, dann kann da auch kein eintrag reinrutschen, dessen key nicht auch in tblGruppenAbo enthalten ist.
          Zuletzt geändert von graf; 26.06.2003, 11:02.

          Kommentar


          • #6
            Hmm,

            komm da grad ned mit! Wo und womit einen 2. JOIN??? und tblKunde.GruppenNr gibt es ja gar nicht :-(

            Gruß Sebastian

            Kommentar


            • #7
              Code:
              SELECT k.KundenNr, k.Name, g.KundenNr NichtAbonnement
              FROM tblKunde k
              LEFT OUTER JOIN tblGruppeAbo g
              USING (KundenNR)
              WHERE g.GruppenNr=50001 AND g.KundenNr IS NULL
              probier's mal damit
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                ich will sagen, wenn in tblGruppenAbo nicht zwingend eine kundennummer aus tblKunde und gruppennummer aus tblGruppe drin stehen muss, dann führt deine abfrage nie zum ziel, da diese "echte" verknüpfung die du mit dem join nachvollziehen willst nicht existiert.

                Kommentar


                • #9
                  Original geschrieben von mrhappiness
                  [code]
                  FROM tblKunde k
                  LEFT OUTER JOIN tblGruppeAbo g
                  USING (KundenNR)
                  mit dem LEFT JOIN wird es gehen, aber nicht mit dem INNER JOIN.

                  Kommentar


                  • #10
                    Nein, funzt auch ned, da bekomm ich auch nur 3 leere Spalten. Die "NichtAbonement" Spalte brauch ich ja eigentlich auch nicht, oder?

                    Langsam bin ich am verzweifeln

                    Gruß Seppel

                    Kommentar


                    • #11
                      du solltest 3 einträge bekommen mit je 3 spalten

                      poste dochmal das ergebnis meiner LEFT OUTER JOIN abfrage
                      lass die spalte NichtAbonnement mal drin zum testen
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Code:
                        SELECT tblGruppeAbo.KundenNr, tblKunde.Name
                        FROM tblGruppeAbo
                        LEFT JOIN tblKunde
                        USING (KundenNr)
                        WHERE tblGruppeAbo.GroupID != '500001'
                        ORDER BY tblGruppeAbo.KundenNr
                        liefert dir alle kunden die nicht in der gruppe 500001 sind, selbst wenn sie eine kundenummer haben, die nicht in tblKunde steht.
                        Zuletzt geändert von graf; 26.06.2003, 11:47.

                        Kommentar


                        • #13
                          an mrhappiness: Das Ergebnis sind 3 leere Spalten

                          und ich glaub da denkt ihr grad in die falsche Richtung, hier nochmal ein Beispiel:

                          tblKunde
                          101, Schröder
                          102, Kohl
                          103, Westerwelle
                          104, Seppel

                          tblGroupsSubscribe
                          201, 101
                          201, 102
                          202, 102
                          202, 103

                          Also Schröder und Kohl sind in Gruppe 201
                          und Kohl und Westerwelle in Gruppe 202


                          Nun will ich ja, wenn ich nach Gruppe 201 abfrage, aus der tblKunde den Westerwelle und den Seppel als Resultat bekommen, und nach Gruppe 202 abgefragt sollte mir Schröder und Seppel geliefert werden.

                          Bei all den vorigen Abfragen, würde nirgendwo der Seppel auftauchen und da liegt denke ich das Problem. Kann es sein, daß nach dem Join (egal welcher) es den Seppel schon gar nicht mehr gibt weil er ja nirgendwo in der tbl GroupsSubscribe auftaucht?

                          Gruß Seppel

                          Kommentar


                          • #14
                            SELECT *
                            FROM tblKunde K
                            LEFT JOIN tblGroupsSubscribe G
                            USING ( groupID )
                            WHERE G.groupID !=201 ORDER BY K.KundenNr

                            Kommentar


                            • #15
                              :-/ Da bringt er mir folgenden Fehler

                              --> Unknown column 'K.GroupID' in 'on clause' <--

                              in der tblKunde gibt es ja auch kein Feld GroupID

                              Kommentar

                              Lädt...
                              X