MySQL查询 - 从一个表中选择,从另一个表中计数

时间:2017-01-26 12:07:18

标签: mysql

我有两个表的数据库 - '仓库'和'盒子'。 每个方框都有包含仓库代码的字段,每个仓库 - “容量”字段。

目的是仅查找“过满”的仓库(仓库容量小于使用此仓库代码的所有箱子的数量)。

因此,我通过此查询计算所有框并加入仓库容量:

SELECT Warehouses.Code, Warehouses.Capacity, COUNT(Boxes.Code)
FROM `Warehouses` RIGHT JOIN
     `Boxes`
     on Warehouses.Code = Boxes.Warehouse
GROUP BY Boxes.Warehouse

结果:

------------------------------
Code | Capacity | COUNT
------------------------------
1    |    3     | 4
------------------------------
2    |    4     | 2
------------------------------
3    |    7     | 2
------------------------------
4    |    2     | 1
------------------------------

这会返回仓库的容量并计算其中的方框,但我不知道如何以及在何处比较这些数字。

1 个答案:

答案 0 :(得分:2)

您可以在HAVING子句中执行此操作:

SELECT w.Code, w.Capacity, COUNT(b.Code)
FROM `Warehouses` w LEFT JOIN
     `Boxes` b
     on w.Code = b.Warehouse
GROUP BY w.Code, w.Capacity
HAVING w.Capacity < COUNT(b.Code);

注意:

  • LEFT JOIN通常比RIGHT JOIN(“保留第一个表中的所有行”与“保留最后一个表中的所有行,我还没有读过”)更容易理解。但是,此查询可能只需要INNER JOIN
  • 据推测,Warehouses应该是第一个表格,因为您的问题与此实体有关。
  • HAVING子句在聚合后进行比较。