私のシナリオでは、従業員は(ある種の)アイテムを定期的に検査します。従業員の名前と実行した検査の数を示したい。MYSQL複数の結合が必要なすべての行を返しません。従業員 - 管理者 - 項目検査
結果作品の私のクエリの並べ替え
+------------------+------------------+
| employee | inspections |
+------------------+------------------+
| Peter Griffin | 864 |
| Chris Griffin | 655 |
| Meg Griffin | 647 |
| Lois Griffin | 457 |
| Stewie Griffin | 332 |
+------------------+------------------+
私のクエリから、私はCOUNT
(項目がでないことがあるから、それを除外することになっているテーブルitem
にactive
というフィールドを持っています検査された)。 WHERE i.active = 1
には正しい効果がありません。まだアクティブでないアイテムはカウントされます。クエリを逆に選択してを選択してのアクティブなアイテムをi.active = 0
とすると、数多くのアイテムがactive = 0
の場合は7とカウントされます。私は間違って何をしていますか?
マイクエリ
SELECT concat(e.first_name,' ',e.last_name) AS employee, COUNT(insp.item_id) AS inspections
FROM employee e,
inspection_schedule insp,
item_supervisor super,
item i
WHERE i.active = 1
and e.employee_id = super.employee_id
AND super.item_id = i.item_id
AND insp.item_id = i.item_id
GROUP BY employee
ORDER BY inspections DESC
表の概要
表の説明
品目:従業員の仕事項目。
ITEM_SUPERVISOR:アイテムを従業員に接続します。 1つの特定の項目に複数の従業員を接続することができます。
INSPECTION_SCHEDULE:隔月に検査する項目は、月の対応する数の6つのエントリを持つことになります。
これを理解するのに役立つ少しのデータを追加してください。 –
*「i.active = 0のアクティブなアイテムを選択しないようにクエリを逆にすると、アクティブなアイテムが数百になるとカウントは7になります」* あなたが話しているこれらのアイテムには、 inspection_schedule。条件を照会すると、そのようなレコードは除外されます。 –
'item'と' inspection_scedule'テーブルの論理的関係は何ですか?スキーマから見ると少なくとも少なくとも1 - *です。それは実際に '1 - 1'か' 1 - 0..1'ですか? –