2017-01-26 4 views
0

私は2つのテーブル - 「倉庫」と「ボックス」を持つデータベースを持っています。 各ボックスには倉庫コードのフィールドがあり、各倉庫 - '容量'フィールドがあります。MySQLのクエリ - 1つから選択し、別のテーブルから数えてください

目的は、「過剰充填」されている倉庫(倉庫の容量はこの倉庫コードのすべての箱の数より少ない)を見つけることです。

だから、私はすべてのボックスをカウントし、このクエリによって倉庫の容量に参加:

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

'w.Capacity> COUNT(b.Code) 'を持っていると、容量がまだ残っている倉庫が得られるでしょう... topicstarterは、多くのボックスと容量の間にある"過充填 "倉庫を求めました。 .Capacity

+0

それは機能します! @RaymondNijlandさん、ありがとうございます。 –

+0

。 。ありがとうございました。 –

関連する問題