2017-12-05 8 views
0

Sorry über die Titel, wie ich bin neu in SQL und ich weiß nicht, wie das Problem angemessen ...SQL Many-to-many mehr Artikel pro Spalte

Ich habe 5 Tabellen zu erklären.

Lieferung

ID | Time  | 
---------------| 
1 | 1999-01-01| 
2 | 1999-01-01| 
3 | 1999-01-01| 

Delivery_Items

Delivery_ID | Order_ID| 
----------------------| 
1   | 1  | 
2   | 2  | 
3   | 3  | 

Lebensmittel

ID | Name | Price | 
-------------------| 
1 |Eggs | 3.00 | 
2 |Bacon | 1.50 | 
3 |Ham | 4.00 | 

Ordered_Items

Order_ID | Item_ID | 
--------------------| 
1  | 1  | 
1  | 1  | 
1  | 2  | 
1  | 3  | 
2  | 2  | 
2  | 1  | 
3  | 3  | 
Bestellungen 0

ID | Total_Price | 
------------------| 
1 | 11.50  | 

Ich mag würde sie miteinander verbinden, um ein erwartetes Ergebnis von etwas wie diese

Delivery_ID | Food.Name   | Total Price | 
----------------------------------------------------| 
1    |Eggs, Eggs, Bacon, Ham| 11.50  | 
2    |Bacon, Eggs   | 4.50  | 
3    |Ham     | 4.00  | 

Bisher habe ich versucht:

SELECT 
    O.Id, 
    GROUP_CONCAT(F.Name 
     SEPARATOR ','), 
    O.Total 
FROM 
    Food F 
     LEFT OUTER JOIN 
    Ordered_Items OI ON OI.Item_ID = F.Id 
     LEFT OUTER JOIN 
    Orders O ON O.Id = OI.order_Id 
GROUP BY O.Id; 

die in

Ergebnisse
Delivery_ID | Food.Name      | Total Price | 
-------------------------------------------------------------| 
NULL   |Eggs, Bacon, Ham(trash values) | NULL  | 
1    |Eggs, Eggs, Bacon, Ham   | 11.50  | 
2    |Bacon, Eggs     | 4.50  | 
3    |Ham       | 4.00  | 

Wie entferne ich diese erste NULL-Zeile? Und durch Trash-Werte meine ich, dass ihre IDs in keiner Ordered_Items Zeile erscheinen.

+3

Was haben Sie bisher versuchen? –

+0

Ist "Item_ID" in Ihren Bestellartikeln die ID des Lebensmittels? –

+0

Ja, die Item_ID in den bestellten Artikeln ist die ID des Essens – randomehh

Antwort

0

Um zwei oder mehr Tabellen, die Sie für diese Join und die Abfrage zu verwenden, benötigen SELECT Delivery_Items.Delivery_ID,Food.Name,Orders.Total_Price FROM Delivery_Items JOIN Ordered_items ON Delivery_Items.Delivery_ID=Ordered_Items.Order_ID JOIN Food ON ordered_items.Order_ID=Food.ID JOIN Orders ON Delivery_Items.Delivery_ID=Orders.ID

So wie-

"aussehen, wie wir die Tabellen aussehen müssen wir tables.Thus beginnen Beitritt Zuerst verbinden wir Delivery_Items und Ordered_Items, die ein temporäres Ergebnis erzeugt haben, indem wir eine andere Tabelle erstellen, und dann kommt eine andere Tabelle hinzu und der Prozess läuft weiter.

1.First wählen, welche Spalten in Endergebnisses

2.Select alle diese Spalten

3 zeigen wollen.Sehen Sie die Tabellen, die Sie müssen sich registrieren um das Ergebnis zu erhalten

4.Then in der SQL-Abfrage beitreten diejenigen nach table1.primarykeytable2.foreignkey

0

Wie ich verstanden habe, müssen Sie den Gesamtpreis pro Bestellung wissen.
Sie können dies versuchen:

SELECT o.Order_ID, SUM(f.Price) 
    FROM Ordered_Items oi INNER JOIN Food f 
    ON oi.Item_ID = f.ID 
    GROUP BY o.Order_ID; 

Wie für die Einzelteile, ich glaube, Sie kann es nicht tun, da Sie kein Feld vom Typ VARCHAR aggregieren kann.
Sie können die folgenden versuchen:

SELECT o.Order_ID, f. Name 
    FROM Ordered_Items oi INNER JOIN Food f 
    ON oi.Item_ID = f.ID 
    ORDER BY o.Order_ID; 

Das Ergebnis ungefähr wie die folgenden sein:

Order_ID | Name 
-------------------- 
1  | Eggs  
1  | Eggs  
1  | Bacon  
1  | Ham  
2  | Bacon  
2  | Eggs  
3  | Ham 

hoffe, das hilft!

Verwandte Themen