2017-01-26 84 views
0

我有兩個表 - '倉庫'和'盒'的數據庫。 每個箱子都有倉庫代碼字段,每個倉庫 - 「容量」字段。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

第一倉庫看起來超載(4> 3)其他沒有。你需要做更多的事情?什麼是問題? –

回答

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子句在聚合後進行比較。
+0

'HAVING w.Capacity> COUNT(b.Code)'將得到仍有能力的倉庫.. topicstarter要求「過滿」的倉庫,在那裏有很多箱子和容量......所以它應該是'HAVING W .Capacity

+0

這有效!謝謝 –

+0

@RaymondNijland。 。 。謝謝。 –

相關問題