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にあまり慣れていないため、その方法がわかりません。Googleは答えを知りませんでした

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 に答える