我已经为此苦苦挣扎了几个小时。
我有两个表:第一个有出勤记录,有行 ID、客户 ID、服务日期和从 0 到 16 的单位数。第二个表有客户响应,有行 ID、客户 ID、服务日期和许多其他领域。
这里的问题是:如何找到第二张 table 上缺失的客户,这些客户在特定日期的第一张 table 上有超过 0 个单位?请注意,唯一的唯一字段是行 ID。
几小时后,我想到了这个,它的工作原理,但出于某种原因,对于大于 20 天的日期范围返回一个空结果集:
SELECT `caseload`.* FROM `caseload` WHERE `caseload`.`client_id` NOT IN
(
SELECT `caseload`.`client_id` FROM `caseload`
JOIN `form_psr`
ON `caseload`.`client_id` = `form_psr`.`client_id`
AND `caseload`.`date` = `form_psr`.`service_date`
WHERE `caseload`.`date` >= '2019-07-01' AND `caseload`.`date` <= '2019-07-31'
)
HAVING `date` >= '2019-07-01' AND `date` <= '2019-07-31'
AND `units` > 0
这个 sqlfiddle 有一些示例数据:http://sqlfiddle.com/#!9/0a4be2/49
提前致谢!
最佳答案
使用不存在
:
select cl.*
from caseload c
where c.units <= 16 and
c.service_date >= '2019-07-01' and
c.service_date < '2019-08-01' and
not exists (select 1
from form_psr as fp
where c.client_id = fp.client_id
);
请注意,我还更改了日期比较。此版本适用于日期和日期/时间值。一般来说,between
可能会对日期/时间值产生意想不到的行为,因此我建议使用这种明确的结构。
我还假设单位数永远不会是负数。
关于mysql - 根据两个字段查找一个表中缺失的值,这些值存在于另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57368286/