我有两个表的数据库 - '仓库'和'盒子'。 每个方框都有包含仓库代码的字段,每个仓库 - “容量”字段。
目的是仅查找“过满”的仓库(仓库容量小于使用此仓库代码的所有箱子的数量)。
因此,我通过此查询计算所有框并加入仓库容量:
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
------------------------------
这会返回仓库的容量并计算其中的方框,但我不知道如何以及在何处比较这些数字。
答案 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
子句在聚合后进行比较。