MySQL - Bedinung in LEFT Join
Maresa P.
- datenbank
0 Vinzenz Mai0 Ilja
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!
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
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
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