SQL内连接选择字段列表

时间:2016-10-10 16:43:22

标签: mysql sql

我有2个表,1个称为menu,1个称为orderregelorderregel是商店中用于存储特定产品和金额的数据库表。

我有这个用于餐馆的菜单,人们可以订购不同的菜单,他们都将获得自己的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'将在我的代码中根据所选订单/客户更改为变量。谢谢你们的帮助

4 个答案:

答案 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