m:n-Abfrage (kompliziert)
Andreas Gueso
- datenbank
Hallo,
ich stehe vor einem für mich unlösbaren Problem:
Ich habe 3 Tabellen:
Artikel:
id | Titel | Text | Autor
Kategorien:
id | Titel | Beschreibung
Artikel_Kategorien
Artikel_id | Kategorie_id
Nun möchte ich alle Artikel haben:
SELECT * FROM Artikel
Kein Problem soweit
Nun möchte ich alle Artikel zu einer bestimmten Kategorie_id haben. Also eine Liste aller Artikel in der Kategorie mit der ID 1
Ich hatte an so etwas gedacht wie
SELECT * FROM Artikel WHERE Artikel.id IN (SELECT Artikel_id FROM Artikel_Kategorien WHERE Artikel_Kategorien.Kategorie_id=1)
Leider funktioniert das genauso wenig wie:
SELECT * FROM Artikel WHERE Artikel.id IN (SELECT Artikel_id FROM Artikel_Kategorien WHERE Artikel_Kategorien.Kategorie_id=1 AND Artikel_Kategorien.Artikel_id=Artikel.id)
Wenn kein Artikel in der Kategorie 1 enthalten ist, bekomme ich korrekter weise ein leeres Result. Ist ein Artikel in Kategorie 1, so funktioniert das oben genannte prächtig. Sobald aber mehr als ein Artikel in der abgefragten Kategorie ist, liefert mir das Result immer nur den ersten Artikel.
Kann mir da vielleicht jemand helfen?
Liebe Grüße
Andy
yo,
das problem läßt sich auf viele weise lösen, aber ich würde zwei ganz einfache joins benutzen.
SELECT a.id, a.titel, k.titel....
FROM artikel a
INNER JOIN artikel_Kategorien ak ON ak.artikel_id = a.id
INNER JOIN kategorien k ON k.id = k.kategorie_id
WHERE k.id = 1
;
Ilja
Hallo Ilja,
das problem läßt sich auf viele weise lösen, aber ich würde zwei ganz einfache joins benutzen.
SELECT a.id, a.titel, k.titel....
FROM artikel a
INNER JOIN artikel_Kategorien ak ON ak.artikel_id = a.id
INNER JOIN kategorien k ON k.id = k.kategorie_id
WHERE k.id = 1
;
und da der OP offensichtlich von Joins noch nichts weiß, möchte ich diesem
unsere Join-Artikel empfehlen:
Einführung in Joins
Fortgeschrittene Jointechniken
Freundliche Grüße
Vinzenz