Announcement

Collapse
No announcement yet.

knifflige mysql Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • knifflige mysql Abfrage

    Hallo,

    ich komme bei einer Abfrage nicht weiter. Vielleicht kann mir jemand helfen:

    Ich habe zwei Tabellen:

    Tab1 (Mitarbeiter):
    Id
    Name

    Tab2 (Abteilung_Mitarbeiter):
    AbteilungId
    MitarbeiterId

    Ich möchte jetzt alle Mitarbeiter haben, die ausschließlich der Abteilung mit der ID=10 zugeordnet sind.

    Die Tabelle Abteilung_Mitarbeiter ist eine zuordnungstabelle. Hier steht die MitarbeiterID und die AbteilungsID. Somit kann einem Mitarbeiter z.B. zwei oder mehr Abteilungen zugeordnet werden. Ich brauche jedoch nur die Mitarbeiter die eine einzige Abteilung besitzen und diese soll die AbteilungsID=10 sein.

    Ein LEFT JOIN bringt mich irgendwie nicht weiter, da ich dann nicht weiß ob der Mitarbeiter mehr Abteilungen "besitzt"

  • #2
    Hallo,

    sorry, dass ich das so offen sage, aber irgendein SQL-Buch oder -Turtorial zum Thema Select und Join erklärt das auch.

    Lösung:
    select Tab1.id, Tab1.Name, Tab2.AbteilungId from Tab1 join Tab2 on ( Tab1.id = Tab2.MitarbeiterId ) where Tab2.AbteilungId = 10;

    Comment


    • #3
      Originally posted by A. Fuss View Post
      ...Lösung:
      select Tab1.id, Tab1.Name, Tab2.AbteilungId from Tab1 join Tab2 on ( Tab1.id = Tab2.MitarbeiterId ) where Tab2.AbteilungId = 10;
      Sorry, aber das ist nicht die Lösung! Mit diesem Join werden auch Mitarbeiter aus Abteilung 10 gefunden, die noch einer weiteren Abteilung zugeordnet sind. Und damit ist die Bedingung:
      Originally posted by Maik20 View Post
      Ich brauche jedoch nur die Mitarbeiter die eine einzige Abteilung besitzen und diese soll die AbteilungsID=10 sein.
      nicht erfüllt.
      Diese Bedingung muß zusätzlich abgefragt werden. Z.B. über ein NOT EXISTS.

      [highlight=sql]
      select Tab1.id, Tab1.Name, Tab2.AbteilungId
      from Tab1
      inner join Tab2 on Tab1.id = Tab2.MitarbeiterId
      where Tab2.AbteilungId = 10
      and not exists (
      select 1 from Tab2 iTab2
      where iTab2.MitarbeiterId = Tab1.id
      and iTab2.AbteilungId <> 10
      );
      [/highlight]

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Besten Dank.

        Genau das war mein Problem.

        Comment

        Working...
        X