Vinzenz Mai: SQL - INNER JOIN über 4 Tabellen Problem

Beitrag lesen

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