我正在尝试报告我们每天的访谈次数。
所以我有一张采访表 比如
interviewid,STAFFID,日期,注释...
以及包含2005年至2020年所有日期的日期参考表。具有名为ref。
的单个日期字段我的查询是:
SELECT count(*) as cnt FROM `interviews`
right JOIN `dateRef` ON `date` = ref where type = 2
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d')
显示我们所做的采访是否合适,但在我们没有进行任何采访时却没有...
例如,这会返回:
1
2
4
但它应该返回
0
1
0
2
0
4
0
编辑:
显然问题来自where子句,因为如果我删除它,查询工作正常......
答案 0 :(得分:3)
尝试替换
right join
而不是
left join
另一个变化是
where type = 2
到
where type = 2 OR type IS NULL
SO最终查询
SELECT count(*) as cnt FROM `interviews`
right JOIN `dateRef` ON `date` = ref where (type = 2 OR type is null)
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d')
答案 1 :(得分:0)
如果我理解正确,type
就是一栏采访。由于您使用了正确的联接,因此您的联接表包含没有采访的日期行,但这些行在NULL
列(以及type
的任何其他列)中都有interviews
,因为没有interviews
表中这些日期的条目。它们会被您需要WHERE
的{{1}}条款过滤掉,这就是type=2
看不到它们的原因。
您可以尝试COUNT
之类的内容,至少WHERE (type=2 OR type IS NULL)
永远不会interviews.type
。