Problem mit SQL Befehl

M

mikeneh

Guest
Also ich habe 2 Tabellen.

Tabelle 1:
Zutaten
eintrag_id(Primärschlüssel)
name

Tabelle 2:
Rezepte
eintrag_id(Primärschlüssel)
rezept_id
zutat1
zutat2

in der Tabelle 1 habe ich zb die Einträge
1
Milch
2
Kakaopulver
3
Wasser
4
Kaffeepulver
5
fertiger Kaffee
6
Fertiger Kakao

Tabelle 2 sieht dann so aus
1
5 (id für fertigen kaffee)
3 (id für zutat1=wasser)
4 (id für zutat2=kaffeepulver)


Ich sitze nun schon seit 2 Tagen verzweifelt davor eine Abfrage dafür in einen SQL String zu bekommen.
Der String soll so aussehen:
Select zutaten.name,rezepte.id,rezept.zutat1,rezept.zutat2 danach soll dann zu jeder rezpt id der entsprechende Name aus der Tabelle Zutat geholt werden.


Das Ergnis soll dann sein das die 2 Tabelle bei der Ausgabe so ausschaut:
Eintag|Produkt|Zutat1|Zutat2
1|fertiger Kaffee|Wasser|Kaffeepulver

Wie kann ich das mit einem oder mehrern Joins erreichen? Ich sitze wie gesagt nun seit 2 Tagen an dem Problem und bin langsam am verzweifeln.
 
SQL select
zutat1.name as zutat1,
zutat2.name as zutat2,
rezept.name as rezept,
rezepte.eintrag_id
from rezepte left join zutaten as zutat1 on zutat1.eintrag_id = rezepte.zutat1
left join zutaten as zutat2 on zutat2.eintrag_id = rezepte.zutat2
left join zutaten as rezept on rezept.eintrag_id = rezepte.rezept_id
 
WoW die Hilfe kam aber schnell *sich herzlichst bedankt*
 
Eine Frage oder besser bitte.

Kann man einem ungebildeten wie mir auch die zusammenhänge nun erklären?

Weil so begrifflich steige ich da nicht so ganz durch.
 
funktioniert es denn überhaupt?
smile.gif


wähle den namen aus der tabelle zutat1 ( join durch tabelle zutaten) als zutat1
wähle den namen aus tabelle zutat2 ( join durch tabelle zutaten) als zutat2
wähle den namen des rezepts aus tabelle rezept ( join durch tabelle zutaten) als rezept

von der tabelle rezepte, also alle einträge aus dieser tabelle nehmen und dann joinen also hinzufügen die tabelle zutaten und zwar 3 mal für die felder zutat1 zutat2 und rezept_id aus der tabelle rezepte. sind immer verschiedene datensätze die ich aufgrund der ON bedingung hinzufüge also muss es 3 mal sein.


bei dem left join werden alle daten der linken und sofern vorhanden der rechten tabelle miteinander verknüpft. kann keine verknüpfung zur rechten zu einem datensatz hergestellt werden sind die felder der rechten tabelle bei diesem datensatz NULL ....
es gibt noch nen inner join der nimmt dann nur die datensäzte wo die on bedinngung passt.
beim right join werden alle daten der rechten und sofern vorhanden die der linken verknüpft.

so der sql experte bin ich halt au nicht, vielleicht kann das nochmal jemand schöner erklären;)
 
ja es funktioniert besten Dank.
Ich grübel derzeit nurnoch über der funktion.

Kann das ganze soweit nachvollziehen.
bei einer Sache fehlt mir aber irgendwo das nötioge Verständnis.

Select
zutat1.name as zutat1

Bezieht sich das auf zutaten.name oder auf rezepte.zutat1?
Das muß ich noch austüfteln.
 
Zurück
Oben