mysql - 从mysql查询显示今天不在场的人员列表

标签 mysql phpmyadmin

我正在尝试显示拥有此权限的人员列表

情况1:

忘记签到而在场

情况2:

今天缺席且无法签到的人。

在这两种情况下,签到都将为空,因为都没有签到

这就是我迄今为止所取得的成就

SELECT
    u.id,
    u.`firstname` AS 'Firstname',
    u.`lastname` AS 'Lastname',
    ulr.leave_status AS 'Leave Status',
    ulr.leave_from AS 'Leave From',
    ulr.leave_to AS 'Leave To',
    ulr.leave_description AS 'Leave Description',
    DATE_FORMAT(
        ulr.leave_from,
        '%Y-%m-%d'
    ) AS 'Today''s Date'
FROM
    users u
INNER JOIN users_leave_request ulr ON u.id = ulr.user_id
INNER JOIN checkin_checkout cc ON u.id = cc.users_id
WHERE
    DATE_FORMAT(
        leave_from,
        '%Y-%m-%d'
    ) = CURDATE()
AND cc.checkin_time IS NULL

users_leave_request 表:table1

checkin_checkout 表:table2

最佳答案

此查询将选择今天未签到的所有用户,如果他们在 users_leave_request 中有记录,则也将返回该记录的数据。 通过使用LEFT JOIN,我们可以避免为在users_leave_request中没有条目的未 checkin 用户返回空结果。如果我们使用JOIN,只有在usersusers_leave_request表中都找到记录时才会返回结果。

SELECT
 u.id,
 u.`firstname` AS 'Firstname',
 u.`lastname` AS 'Lastname',
 ulr.leave_status AS 'Leave Status',
 ulr.leave_from AS 'Leave From',
 ulr.leave_to AS 'Leave To',
 ulr.leave_description AS 'Leave Description',
 DATE_FORMAT(
    ulr.leave_from,
    '%Y-%m-%d'
 ) AS 'Today''s Date'
FROM users AS u
LEFT JOIN users_leave_request ulr ON u.id = ulr.user_id
WHERE u.id NOT IN (
    SELECT u.id
    FROM
        users u
    INNER JOIN checkin_checkout cc ON u.id = cc.users_id
    WHERE
        DATE_FORMAT(cc.checkin_time, '%Y-%m-%d') = CURDATE()    
)

关于mysql - 从mysql查询显示今天不在场的人员列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40276589/

相关文章:

c++ - std::string 在迭代 mySQL 连接器查询结果时崩溃

mysql - 显示 WHERE IN 子句 SQL 中每条记录的最大日期

mySQL 使用与另一张表自然连接的字段从一个表中删除?

MySQL连接到谷歌应用引擎实例

mysql需要从查询中提取中值

mysql - 有没有办法重写此查询以作为 SQL View 工作

MySQL PHPMyAdmin 错误 #1062 - 键 '0' 的重复条目 'PRIMARY'

mysql - 如何修复 #1045 - 用户 'root' @'localhost' 的访问被拒绝(使用密码 : NO)

java - 未知主机异常 : while connecting to database server

mysql - 在 MySQL 中存储 SHA1 哈希值