Maresa P.: MySQL - Bedinung in LEFT Join

Hallo Forum,

ich habe in meiner MYSQL Datenbank zwei Tabellen :

autos
-----
autos_id
autos_bezeichnung

ausstattung
-----
ausstattung_id
ausstattung_autos_id
ausstattung_bezeichnung

Diese Tabellen werden über einen LEFT JOIN verknüpft:
SELECT * FROM autos LEFT JOIN ausstattung ON autos_id = ausstattung_autos_id GROUP BY autos_id

Ein Eintrag in der Tabelle Autos kannmehrere verknpüfte Datensätze in der Tabelle ausstattung haben.
Ich möchte die Abfrage nun so erweitern, dass mehrere ausstattung_id zu einem Datensatz aus autos_id vorhanden sein müssen, damit der Datensatz aus autos_id angezeigt wird.

Beispiel:

In der Tabelle autos sind folgende Datensätze

1
polo

2
golf

In der Tabelle ausstattung sind folgende Datensätze

1
1
sitz

2
1
reifen

3
1
lenkrad

4
2
radio

Ich möchte nun aus der Tabelle autos alle Autos ausgeben, die einen Sitz UND ein Radio haben.

Wie mache ich das? Als WHERE Bedingungen angeben funktioniert nicht. Sind Subselects die Lösung?

Herzlichen Dank für Euere Hilfe!

  1. Hallo,

    autos

    autos_id
    autos_bezeichnung

    ausstattung

    ausstattung_id
    ausstattung_autos_id
    ausstattung_bezeichnung

    Diese Tabellen werden über einen LEFT JOIN verknüpft:
    SELECT * FROM autos LEFT JOIN ausstattung ON autos_id = ausstattung_autos_id GROUP BY autos_id

    Ich möchte die Abfrage nun so erweitern, dass mehrere ausstattung_id zu einem Datensatz aus autos_id vorhanden sein müssen, damit der Datensatz aus autos_id angezeigt wird.

    Beispiel:
    In der Tabelle autos sind folgende Datensätze

    in tabellarischer Form sieht's doch übersichtlicher aus:

    autos_id | autos_bezeichnung
    ---------+------------------
           1 | Polo
           2 | Golf

    In der Tabelle ausstattung sind folgende Datensätze

    ausstattung_id | ausstattung_autos_id | ausstattung_bezeichnung
    ---------------+----------------------+------------------------
                 1 |                    1 | Sitz
                 2 |                    1 | Reifen
                 3 |                    1 | Lenkrad
                 4 |                    2 | Radio

    Ich möchte nun aus der Tabelle autos alle Autos ausgeben, die einen Sitz UND ein Radio haben.

    also keines ;-)

    Wie mache ich das? Als WHERE Bedingungen angeben funktioniert nicht. Sind Subselects die Lösung?

    eine mögliche. Siehe diesen Archivbeitrag zu einem vergleichbaren Problem.

    Freundliche Grüße

    Vinzenz

    1. in tabellarischer Form sieht's doch übersichtlicher aus:

      ja!

      »» Ich möchte nun aus der Tabelle autos alle Autos ausgeben, die einen Sitz UND ein Radio haben.

      also keines ;-)

      Ich hatte mich gestern Abend verschrieben, sorry. ICh meinte Sitz und Reifen.

      »» Wie mache ich das? Als WHERE Bedingungen angeben funktioniert nicht. Sind Subselects die Lösung?

      eine mögliche. Siehe diesen Archivbeitrag zu einem vergleichbaren Problem.

      Danke für den Link, ich werde es mit Subselects, so wie in #3 beschrieben, probieren.

      Maresa

  2. moin,

    Diese Tabellen werden über einen LEFT JOIN verknüpft:
    SELECT * FROM autos LEFT JOIN ausstattung ON autos_id = ausstattung_autos_id GROUP BY autos_id

    als ergänzung zu dem, was dir Vinz schon gesagt hat. diese art der abfrage, bzw. gruppierung würde bei jedem andenrem dbms zu einer fehlermeldung führen, nur nicht bei mysql. normalerweise darf man nur die spalten anzeigen, über die man auch gruppiert hat, in deinem falle wäre das autos_id oder aber die in einer aggregatfunktion wie zum beispiel COUNT() eingebettet sind.

    mysql geht da aber aus performancegründen einen eignen weg, der alleine hier im selfhtml forum schon zu cirka 10 milliarden verwirrten menschen geführt hat, die zum großen teil gar nicht erkennen, das es sich um einen fehler handelt. deswegen mein tipp an dich, gib nur die spalten aus, über die du auch gruppiert hast. willst du mehr ausgeben, als die gruppierung her gibt, dann benutzt man andere wege wie zum beispiel korrelierte unterabfragen.

    ps: noch ein zipp, bei den bezeichnern von tabellen und spalten nimmt man in aller regel immer den singular.

    Ilja