我有2个表,1个称为menu
,1个称为orderregel
。
orderregel
是商店中用于存储特定产品和金额的数据库表。
我有这个用于餐馆的菜单,人们可以订购不同的菜单,他们都将获得自己的orderregel,然后将其添加到您最后支付的订单中。
所以我希望看到每张桌子选择的菜单以及它们的选择量。
以下是2个表格:
|---------------------|-------------------------|
| Menu | Orderregel |
|---------------------|-------------------------|
| ID | Name | ID | Quantity | Menu_id |
|---------------------|-------------------------|
| 1 | Menu One | 1 | 3 | 1 |
| 2 | Menu two | 2 | 2 | 1 |
| 3 | Menu Three | 3 | 4 | 3 |
|---------------------|-------------------------|
使用SQL查询我想得到这个结果:
|---------------------|
| Result of query |
|---------------------|
| Menu Name|Quantity |
|---------------------|
| Menu One | 5 |
| Menu Two | 0 |
|Menu Three| 4 |
|---------------------|
我目前的SQL查询是:
SELECT SUM(orderregel.aantal) AS Aantal
FROM `orderregel`
WHERE menu_id IS NOT null
GROUP BY menu_id
哪个会给我这个结果
|---------------------|
| Result of query |
|---------------------|
| Quantity |
|---------------------|
| 5 |
| 4 |
|---------------------|
我现在正在试图找出一个查询,它将获得此表中上面所示的名称和数量。我试图做的是:
SELECT menu.naam, quantity.aantal
FROM `menu`
INNER JOIN
(SELECT sum(orderregel.aantal) AS aantal
FROM orderregel
WHERE menu_id IS NOT null
GROUP BY menu_id) AS quantity
但是这个查询会以奇怪的方式给我重复,比如:
|---------------------|
| Result of query |
|---------------------|
| Menu Name|Quantity |
|---------------------|
| Menu One | 5 |
| Menu Two | 0 |
|Menu Three| 5 |
| Menu One | 4 |
| Menu Two | 0 |
|Menu Three| 4 |
|---------------------|
你有解决方案吗?感谢
编辑1 我忘了提到我使用MySQL,我试图LEFT JOIN和OUTER JOIN,这两个都给了erro 1062
编辑2
SELECT menu.naam as 'Menu naam', sum(orderregel.aantal) as Aantal
FROM `menu`
LEFT JOIN orderregel on menu.id = orderregel. menu_id
WHERE order_id = '57'
GROUP BY menu_id
order_id ='57'将在我的代码中根据所选订单/客户更改为变量。谢谢你们的帮助
答案 0 :(得分:2)
改为使用outer join
:
select m.id, m.name, coalesce(sum(o.quantity),0) as quantity
from menu m
left join orderregel o on m.id = o.menu_id
group by m.id, m.name
答案 1 :(得分:2)
查看您的表格,您应该只使用
分组选择 SELECT menu.name, sum(orderregel.quantity) as quantity
FROM `menu`
INNER JOIN orderregel
on menu.menu_id = orderregel. menu_id
group by menu_id
或者如果join子句不总是匹配使用左连接
SELECT menu.name, sum(orderregel.quantity) as quantity
FROM `menu`
LEFT JOIN orderregel
on menu.menu_id = orderregel. menu_id
group by menu_id
答案 2 :(得分:1)
我认为左连接可以实现您的需求。左连接将输出左手(第一个)表的所有行。
SELECT menu.id, menu.naam, SUM(orderregel.aantal) AS Aantal
FROM `menu`
LEFT OUTER JOIN `orderregel` on menu.id = orderregel.menu_id
WHERE menu_id IS NOT null
GROUP BY menu.id, menu.naam
P.S。我猜你现在也想要限制顾客,否则你只需要获得餐厅里每个人订购的菜单数量。
答案 3 :(得分:0)
select name,sum(quantity) as quantity
from
Menu join Orderrege1 as O
on menu.ID = O.menu_id group by Menu.Name