每列SQL多对多项

时间:2017-12-05 14:15:35

标签: mysql join many-to-many

对标题感到抱歉,因为我是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行中。

2 个答案:

答案 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加入那些