这里有3个桌子mb_branch
,mb_item
和mb_sell
。而MB*来自Minibar。
- 我想列出
mb_branch
的所有分支名称,并根据给定的日期计数每个分支的项目。假设是2023-03-11
。 - 因此,我从
mb_branch
中选择所有br.name
,并从mb_item
计数所有行,其中uid
与每个br.uid
相关 - 我在
mb_branch
中有10行,但只显示2行。因为在1中给出的日期中存在项目。 - 我希望每个
br.name
显示即使在mb_item
中也没有行或显示为0。
这是我的代码。
select
br.*, br.name,
count(it.id) as nit,
sl.staff1 as st1,
sl.staff2 as st2,
sl.staff3 as st3,
sl.money as money
from mb_branch br
left join mb_item it on it.uid=br.uid
left join mb_sell sl on sl.uid=br.uid
where date(it.dtime)=?
group by br.uid,date(it.dtime)
分析解答
您将it
表上的条件放入WHERE子句中:
where date(it.dtime)=?
这消除了it
没有匹配的任何outer-joined行,因为如果it.dtime
是NULL,则条件当然会失败。
如果要限制outer-joined表的行,请将条件放在JOIN..ON
中。
...
from mb_branch br
left join mb_item it on it.uid=br.uid and date(it.dtime)=?
left join mb_sell sl on sl.uid=br.uid
group by br.uid,date(it.dtime)