Katrin Behrend: MySQL: Mehrere zutreffende aus Relationstabelle ermitteln

Hallo,

ich habe ein Problem mit der richtigen SQL Abfrage. Hier eine Beispieltabelle:

ID Name Auto
1 Müller Porsche
2 Müller VW
3 Müller BMW
4 Huber BMW
5 Huber VW
6 Schmitt Porsche
[..]

Nun brauche ich als Ergebnis z.B. "Alle Angestellten, die Porsche UND BMW fahren" (Müller).
Wie bekomme ich das hin?

Vielen Dank,
Katrin

  1. Moin

    Nun brauche ich als Ergebnis z.B. "Alle Angestellten, die Porsche UND BMW fahren" (Müller).

    Eine einfache Verknüpfung hilft da.

    WHERE Name='Müller' AND Auto='BMW'

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hallo Bobby,

      danke für Deine Antwort, aber sie hat leider nichts mit der Fragestellung zu tun. Ich möchte als Ergebnis ja "Müller" bekommen.

      Danke, Katrin

      1. Hallo Katrin,

        danke für Deine Antwort, aber sie hat leider nichts mit der Fragestellung zu tun.

        ja, doch sicherlich.

        Ich möchte als Ergebnis ja "Müller" bekommen.

        dann wähle in Deiner SELECT-Anweisung diese Spalte aus und schränke die Ergebnismenge durch die WHERE-Klausel (wie von Bobby bereits erwähnt) entsprechend ein.

        Freundliche Grüße

        Vinzenz

        1. Hallo Ingrid,

          Du schreibst Unsinn. Natürlich ergibt das eine leere Ergebnismenge :-)

          danke für Deine Antwort, aber sie hat leider nichts mit der Fragestellung zu tun.

          ja, doch sicherlich.

          nein.

          Ich möchte als Ergebnis ja "Müller" bekommen.

          mein Artikel, Abschnitt Selfjoin, sollte Dir weiterhelfen.

          Freundliche Grüße

          Vinzenz

  2. yo,

    zum einen scheint dein datenbank-design nicht optimal zu sein. automarken und personen würde ich in verschiedene tabellen trennen und dann über fremdschlüssel miteinander verbinden. aber zurück zu deiner frage:

    SELECT name
    FROM tabelle
    WHERE Auto IN  ('Porsche', 'BMW')
    GROUP BY name
    HAVING COUNT(*) > 1
    ;

    dabei wird vorausgesetzt, dass ein name nicht mehr als einmal das gleiche auto zugeordnet wird. sollte dies der fall sein, ist Vinzenz vorschlag über self joins zu bevorzugen oder unterabfragen.

    Ilja