MySQL Joins Abfrage

hoktar

Cadet 4th Year
Registriert
Juni 2009
Beiträge
102
Hallo, ich hab folgendes Problem:

Ich hab 2 Tabellen die über eine weitere Tabelle mit Fremdschlüsseln verknüpft sind.

Eine Bild Tabelle
id
name
gruppe
...
..

Eine Tags Tabelle
id
name

Und eine Bild_Tags Tabelle
tag_id
bild_id


So und nun will ich alle Bildtags von einer bestimmten Gruppe (siehe Bild Tabelle) rausfinden.
Ich komm aber nicht wirklich zu einem Ergebnis, kann mir vielleicht beim SQL helfen :)?

Danke schonmal :)
 
Code:
SELECT t.name tag_name
  FROM Bild_tags bt
  JOIN Bild b ON b.id = bt.bild_id
  JOIN Tags t ON t.id = bt.tag_id
 WHERE b.gruppe = 'xyz'

oder

Code:
SELECT t.name tag_name
  FROM Bild_tags bt
  JOIN Bild b ON b.gruppe = 'xyz'
  JOIN Tags t ON t.id = bt.tag_id

sollte glaube ich bei mySQL auch gehen.

Zudem sind Tabellennamen immer in der Einzahl zu wählen.
 
Zuletzt bearbeitet:
TiME-SPLiNTER schrieb:
Code:
SELECT t.name tag_name
  FROM Bild_tags bt
  JOIN Bild b ON b.id = bt.bild_id
  JOIN Tags t ON t.id = bt.tag_id
 WHERE b.gruppe = 'xyz'

oder

Code:
SELECT t.name tag_name
  FROM Bild_tags bt
  JOIN Bild b ON b.gruppe = 'xyz'
  JOIN Tags t ON t.id = bt.tag_id

sollte glaube ich bei mySQL auch gehen.

Zudem sind Tabellennamen immer in der Einzahl zu wählen.

Der zweite Vorschlag funktioniert nicht, da das Join-Kriterium zwischen Bild_tags und Bild fehlt. Das würde vermutlich nen ziemlich großes Ergebnis auswerfen (Crossjoin zwischen allen bild_tags Einträgen mit allen Bildern der Gruppe 'xyz')
 
hoktar schrieb:
Hallo, ich hab folgendes Problem:

Ich hab 2 Tabellen die über eine weitere Tabelle mit Fremdschlüsseln verknüpft sind.

Eine Bild Tabelle
id
name
gruppe
...
..

Eine Tags Tabelle
id
name

Und eine Bild_Tags Tabelle
tag_id
bild_id


So und nun will ich alle Bildtags von einer bestimmten Gruppe (siehe Bild Tabelle) rausfinden.
Ich komm aber nicht wirklich zu einem Ergebnis, kann mir vielleicht beim SQL helfen :)?

Danke schonmal :)

Du musst nur einmal joinen, je nachdem, welches Ergebnis Du haben möchtest.

SELECT t.id, t.name
FROM tags t INNER JOIN bild_tags bt ON bt.tag_id = t.id
WHERE bild_id = $bild_id

Dies gibt alle Tags mit der ID eines bestimmten Bildes zurück.

Andersrum geht das natürlich auch...also alle Bilder zu einem Tag, aber so ist das nach meinem Verständnis von Dir nicht gedacht.

Hurga
 
Naja gonzales, wenn du das so machst dann bekommst du auf jeden fall alle, aber eben auch null Werte!
Ohne ein InnerJoin ist das nicht der Fall! Bei einem "normalen" JOIN werden solche Tupel ausgelassen zu denen es kein passendes Tupel gibt (Vergleich über ID z.b.), d.h. letzte kommen nicht in die Ergebnismenge.
Der Unterschied sollte dir klar sein, bei einem Einsatz von solchen Joins!
 
Zurück
Oben