对标题感到抱歉,因为我是SQL的新手,我不知道如何恰当地解释这个问题......
我有5张桌子。
投放
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 |
食品
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 |
订单
ID | Total_Price |
------------------|
1 | 11.50 |
我想将他们加入到一起,以获得类似这样的预期结果
Delivery_ID | Food.Name | Total Price |
----------------------------------------------------|
1 |Eggs, Eggs, Bacon, Ham| 11.50 |
2 |Bacon, Eggs | 4.50 |
3 |Ham | 4.00 |
到目前为止,我已经尝试过:
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;
结果是
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 |
如何摆脱第一个NULL行? 垃圾值我的意思是他们的ID不会出现在任何Ordered_Items行中。
答案 0 :(得分:0)
据我了解,您需要知道每个订单的总价格 你可以试试这个:
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;
至于项目,我认为你不能这样做,因为你不能聚合VARCHAR类型的字段。
您可以尝试以下方法:
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;
结果将如下所示:
Order_ID | Name
--------------------
1 | Eggs
1 | Eggs
1 | Bacon
1 | Ham
2 | Bacon
2 | Eggs
3 | Ham
希望这有帮助!
答案 1 :(得分:0)
要连接两个或多个表,您需要使用Join,对此的查询看起来像 -
'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
所以,当我们需要查看表时,我们开始连接表。因此,首先我们加入Delivery_Items和Ordered_Items,它们创建了一个临时结果,生成另一个表,然后由另一个表连接,然后进程继续。
1.首先选择要在最终结果中显示的列
2.选择所有这些列
3.查找需要加入的表格以获得结果
4.然后在sql查询中根据table1.primarykeytable2.foreignkey加入那些