Hallo,
Nun möchte ich anhand einer Bestellnummer untere Informationen/Felder aus insgesamt 4 Tabellen mit folgendem SQL holen :
» SELECT
> orders.orders_id,
> orders.orders_status,
> orders_products.products_id,
> products_description.products_name,
> products.products_faq_id
> FROM
> orders
> INNER JOIN
> orders_products
> ON
> orders_products.orders_id = orders.orders_id
> INNER JOIN
> products_description
> ON
> products_description.products_id = orders_products.products_id
> INNER JOIN
> products
> ON
> products.products_id = orders_products.products_id
> WHERE
> orders.orders_id = 42
Tipp: Nutze Aliasnamen, um zu kürzeren und dennoch aussagekräftigen Tabellenbezeichnern in qualifizierten Spaltenbezeichnern zu kommen, eine Idee:
o: orders
op: orders_products
pd: products_description
p: products
Obwohl die Bestellung "42" 2 Produkte beinhaltet (1 und 2), sieht die Ausgabe wie folgt aus :
Weitere Idee: Das Ergebnis einer Abfrage ist eine Tabelle. Schreibe sie zur besseren Verständlichkeit als Tabelle:
o_id | status | p_id | name | faq_id
-------------------------------------------------
42 | 3 | 1 | NULL | 0001
42 | 3 | 1 | Das tolle Produkt 1 | 0001
Erwartet hätte ich aber :
o_id | status | p_id | name | faq_id
-------------------------------------------------
42 | 3 | 1 | Das tolle Produkt 1 | 0001
42 | 3 | 2 | Das tolle Produkt 2 | 0001
Hat jemand einen Hinweis
Dies ist mit Deinen Daten, die wir leider nicht kennen, das richtige Ergebnis - wenn auch nicht das von Dir gewünschte. Vermutlich liegt es nicht an Deiner Abfrage, sondern an Deinen Daten. Ich stelle ein paar Mutmaßungen auf:
Es sieht so aus, als gebe es in Deiner Tabelle products_description zwei Einträge mit dem Wert 1 in der Spalte product_id. Weiterhin ist irgendwo keine Entsprechung für Deine product_id 2 vorhanden, so dass das Resultat keine Werte für diese product_id aufweisen kann.
Wo die Fehler in Deinen Daten vorliegen, kannst Du über den schrittweisen Aufbau Deiner Abfrage herausfinden:
1. Nutze nur orders und die WHERE-Klausel
Prüfe das Resultat
2. Joine orders_products dazu
Prüfe das Resultat
Fehlen von Dir erwartete Datensätze, so prüfe mit einer Abfrage auf
orders_products mit einer angemessenen WHERE-Klausel
3. Joine products_description dazu
Gehe analog zu 2 vor
4. Joine products dazu
Falls Du sie noch nicht kennst, ein Hinweis auf unsere JOIN-Artikel in SELFHTML aktuell:
- Einführung in Joins
- Fortgeschrittene Jointechniken
Freundliche Grüße
Vinzenz