SQL返回1表中的用户名,表2中没有匹配的用户

时间:2012-09-01 00:01:51

标签: mysql join left-join

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

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

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

  

从用户左侧选择*加入时间表ON users.id =   timesheet.user_id WHERE timesheet.user_id为null AND timesheet.value   为空

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

我试过

  

从用户左侧选择*加入时间表ON users.id =   timesheet.user_id WHERE timesheet.user_id为null AND timesheet.value   为null AND timesheet.date!= '12 -09-05'

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

1 个答案:

答案 0 :(得分: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