0

我有一个时间表,有几个人使用它

users 有用户的用户名和 id,这与存储日期和 user_id 的时间表一致,user_id 和 id 是链接,因此表 2 可能每天都有一个新条目。

现在我想做的是收集一份今天没有更新时间表的人的名单。这是我的新手尝试

select * from users left join timesheet ON users.id = timesheet.user_id WHERE timesheet.user_id is null AND timesheet.value is null

这将返回所有没有完美的时间表条目但我正在查询特定日期的用户,因此如果他们昨天填写,他们将在时间表中有相应的条目,但这仍然意味着他们今天还没有填写。

我试过

select * from users left join timesheet ON users.id = timesheet.user_id WHERE timesheet.user_id is null AND timesheet.value is null AND timesheet.date != '12-09-05'

我可以看到该逻辑中的缺陷,我已经排除了我想按日期进一步过滤的人,但我无法弄清楚如何获得我想要的结果。我真的希望它先按日期过滤,然后运行该查询,但我不知道该怎么做,因为我对 MySQL 不太熟悉,谷歌说他不知道答案

4

1 回答 1

0

将日期条件移至ON子句:

SELECT * FROM `users`
  LEFT JOIN `timesheet`
     ON `users`.`id`=`timesheet`.`user_id` AND `timesheet`.`date`=CURDATE()
  WHERE `timesheet`.`user_id` IS NULL AND `timesheet`.`value` IS NULL
于 2012-09-01T00:06:02.457 回答