Jan: GROUP BY? mySQL

Hallo liebe Forumsgemeinde,

folgende Frage bzw. Problem:

ich habe eine Tabbelle Mitglieder, mit den relevanten Spalten gruppen_nr und gruppen_leiter, nun möchte ich die gruppen_nr herausfinden in denen es noch kein gruppen_leiter = 'Nein' gibt.

Mit WHERE = 'Nein' erhalte ich zwar die gruppen_nr wo es Mitgleider gibt die kein gruppen_leiter sind, aber einen möglichen Gruppenleiter gruppen_leiter = 'Ja' erhalte ich ja somit nicht.

Ich brauche also alle grupen_nr bzw. die grupen_nr einer Gruppe wo sicher kein Mitglied dabei ist welche die Bedingung gruppen_leiter = 'Ja' erfüllt.

Mein Versuch die gruppen_leiter mit GROUP_BY zusammenzufassen und dann mit HAVING zu prüfen ob welche mit Ja dabei sind, brachte leider nicht das gewünschte ergebnis.

Bin ich mit GROUP BY und HAVING auf dem richitgen Weg?

Für Tipps wäre ich dankbar...

Lieben Gruß Jan

  1. Hi Jan!

    ich habe eine Tabbelle Mitglieder, mit den relevanten Spalten gruppen_nr und gruppen_leiter, nun möchte ich die gruppen_nr herausfinden in denen es noch kein gruppen_leiter = 'Nein' gibt.

    SELECT gruppen_nr  
    FROM Mitglieder  
    WHERE gruppen_leiter != 'Nein'
    

    Mit WHERE = 'Nein' erhalte ich zwar die gruppen_nr wo es Mitgleider gibt die kein gruppen_leiter sind, aber einen möglichen Gruppenleiter gruppen_leiter = 'Ja' erhalte ich ja somit nicht.

    Das erzeugt eher einen Syntaxfehler...

    Ich brauche also alle grupen_nr bzw. die grupen_nr einer Gruppe wo sicher kein Mitglied dabei ist welche die Bedingung gruppen_leiter = 'Ja' erfüllt.

    Hä?
    Also doch:

    SELECT gruppen_nr  
    FROM Mitglieder  
    WHERE gruppen_leiter != 'Ja'
    

    Bin ich mit GROUP BY und HAVING auf dem richitgen Weg?

    Meiner Meinung nach nicht.

    Deine ganze Schilderung ist sehr unverständlich und wirr.
    Zudem vermute ich, dass dein Datenbankdesign nicht gut durchdacht ist.

    Hast du wirklich nur eine Tabelle in der Gruppen und Mitglieder der Gruppen gespeichert werden?
    Kannst du das DB-Design näher erläutern?
    Was willst du wirklich?

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hallo erstmal Dank für deine Antwort,

      ich versuche es nochmal zu erklären:

      es gibt die Tabelle mitglieder, in denen sind Mitgliederinformatonen hinterlegt und auch welcher Gruppe sie zugeordnet sind.

      Es können also mehrer Mitgleider eine gruppen_id haben (alle in einer Gruppe) jetzt kann es in einer Gruppe einen Gruppenleiter geben gruppen_leiter = 'Ja'.

      Ich möchte nun alle Gruppen (gruppen_id) herausfinden in dennen es noch keinen Gruppenleiter gibt, also aus der Menge alle Mitglider einer Gruppe, die Menge in denen es kein Gruppenleiter gibt, damit man sagen kann in der Gruppe "Moep" gibt es noch keinen Gruppenleiter.

      Wenn ich jedoch nach gruppen_leiter != 'Ja' bzw. gruppen_leiter = 'Nein' "suche" erhalte ich zwar eine Menge Mitglider mit diesem Kreterium, aber so erhalte ich nicht die Mitgleider die schon Gruppenleiter sind und deren gruppen_id ich nicht brauche.

      Ich müsste irgendwie schauen gibt es in der Menge Mitglieder einer Gruppe eine Gruppenleiter, wenn ja, dann brauche ich aus dieser Menge von Mitgliedern die Gruppennummer nicht denn einer ist schon Gruppenleiter in dieser Menge von Mitgliedern einer Gruppe.

      Ich hoffe es ist was verständlicher geworden und nicht noch wirrer...

      1. Hi Jan!

        Ich müsste irgendwie schauen gibt es in der Menge Mitglieder einer Gruppe eine Gruppenleiter, wenn ja, dann brauche ich aus dieser Menge von Mitgliedern die Gruppennummer nicht denn einer ist schon Gruppenleiter in dieser Menge von Mitgliedern einer Gruppe.

        Also folgendermaßen?

        SELECT DISTINCT A.gruppen_nr  
        FROM Mitglieder A  
        WHERE A.gruppen_id NOT IN ( SELECT B.gruppen_id  
                                  FROM Mitglieder B  
                                  WHERE B.gruppenleiter = 'ja'  
                                )
        

        Die innere Abfrage tut genau das, was du beschreibst:

        gibt es in der Menge Mitglieder einer Gruppe eine Gruppenleiter

        Die äußere Abfrage realisiert dann dieses:

        dann brauche ich aus dieser Menge von Mitgliedern die Gruppennummer nicht denn einer ist schon Gruppenleiter in dieser Menge von Mitgliedern einer Gruppe.

        Beachte, dass es noch mehr (vielleicht auch elegantere) Möglichkeiten gibt, die obige Abfrage zu gestalten.

        Ich hoffe es ist was verständlicher geworden und nicht noch wirrer...

        Ja, jetzt verstehe ich dich besser. Ich hoffe, meine Antwort hilft dir weiter.

        Allerdings solltest du, wenn möglich, das DB-Design noch ändern.
        Eine Tabelle "Mitglieder" und eine Tabelle "Gruppen", wobei "Gruppen" die Spalte "Gruppenleiter" als Fremdschlüssel auf die Spalte "Mitglieder".ID definiert.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hallo Hopsel,

          vielen Danke für deine Mühen, diese Abfrage brachte das gewünschte Ergebnis...

          An der Tabellenstruktur kann ich leider nichts ändern, aber danke auch für diesen Tip...

          Lieben Gruß Jan

          1. Hello,

            vielen Danke für deine Mühen, diese Abfrage brachte das gewünschte Ergebnis...

            ...sondern? Die Abfrage klingt für deine Beschreibung eigentlich angemessen. Welcher Teil stimmt nicht? Stimmt die Schreibweise von "Ja"?

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            Don't lick your wounds: celebrate them. The scars you bear are the signs of a competitor.  --  character Richard Webber on Grey's Anatomy: 'Where the wild things are'
            1. Hi,

              vielen Danke für deine Mühen, diese Abfrage brachte das gewünschte Ergebnis...
              ...sondern? Die Abfrage klingt für deine Beschreibung eigentlich angemessen. Welcher Teil stimmt nicht?

              Ja, welcher denn nur? Was genau an "OK, passt alles" (sinngemaesz) interpretierst du denn in Richtung Weiterbestehen des Problems?

              :-)

              MfG ChrisB

              --
              „This is the author's opinion, not necessarily that of Starbucks.“
              1. Hello,

                Ja, welcher denn nur? Was genau an "OK, passt alles" (sinngemaesz) interpretierst du denn in Richtung Weiterbestehen des Problems?

                ähm - da siehst du mal wie selten Leute im Forum positive Rückmeldung geben, sowas ist man gar nicht gewöhnt - kaum antwortet einer und es tauchen die Worte "gewünschtes Ergebnis" auf, dann denkt man da steht irgendwo ein "bringt nicht" - *seufz* Ich brauch Urlaub, 3 Wochen noch...

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                Don't lick your wounds: celebrate them. The scars you bear are the signs of a competitor.  --  character Richard Webber on Grey's Anatomy: 'Where the wild things are'