月の名前と特定の月のレコード数を選択する12行(各月に1行)を返すクエリをmysqlで作成する必要があります。私は2つのテーブル、months_tblとevents_tblを持っています。events_tblの各レコードには、datetime列とcompany_id列があります。
私は現在次のようなことをしています(WHERE company_id句がまだないことに注意してください):
SELECT months_tbl.month, COUNT( events_tbl.event_id ) cnt
FROM months_tbl
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH( events_tbl.appt_date_time )
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
これは、私が期待しているもののようなものを返します(12行が選択され、その月のイベントの数、またはイベントがなかった場合はゼロ):
**month** **cnt**
January 0
February 0
March 0
April 0
May 0
June 0
July 0
August 88
September 99
October 120
November 0
December 9
ただし、会社に関係なくすべてのレコードが返されます。クエリがフィルターされていることを確認する必要があるので、where句を追加しました。
SELECT months_tbl.month, COUNT( events_tbl.appt_id ) cnt
FROM months_tbl
LEFT JOIN events_tbl ON months_tbl.month_id = MONTH( events_tbl.appt_date_time )
WHERE events_tbl.company_id = 1
GROUP BY months_tbl.month
ORDER BY months_tbl.month_id ASC;
where句を追加すると、結果は次のようになります。
**month** **cnt**
August 88
September 99
October 120
December 9
左結合を使用しているのに、where句を追加すると、他のすべての月のレコードが失われる理由はありますか?