MySQL为出勤案例选择行

时间:2013-09-11 11:22:02

标签: php mysql sql

我有这些表格:

table 1 : attendance
-------------------------------
ID |   DATE     | EMPLOYEE_ID | 
-------------------------------
1   2013-09-10        1
2   2013-09-10        2
3   2013-09-10        3
-------------------------------


table 2: employee
---------------
ID | NAME     |
---------------
1    Smith
2    John
3    Mark
4    Kyle
5    Susan
6    Jim
---------------

我显示员工选项的实际代码。     

while($row=mysql_fetch_array($query)){
    echo "<option value='$row[employee_id]'>$row[first_name] $row[last_name]</option>";
}
?>

如何显示未在表1中注册的员工列表? 条件是如果员工已经在表1中注册,他们将不会出现在选项上。 我想在<option>元素<select>中显示列表。所以它会回归:凯尔,苏珊,吉姆。

请告诉我正确的查询或者是否有更好的选择,它也会很好。请给出一些解决方案并解释。非常感谢你

更新/编辑:

它也基于当前日期,如果表1中没有最新日期,例如今天是2013-09-15。它将显示所有员工。

2 个答案:

答案 0 :(得分:5)

您可以使用left join执行此操作,然后检查不匹配:

select e.*
from employee e left outer join
     attendance a
     on e.id = a.employee_id
where a.employee_id is null;

这可能是MySQL中最有效的选择。

编辑:

要包含特定日期,请将条件添加到on子句:

select e.*
from employee e left outer join
     attendance a
     on e.id = a.employee_id and a.date = date('2013-09-20')
where a.employee_id is null;

答案 1 :(得分:0)

如果我理解正确,这应该有效,请让所有身份证不在考勤表中的员工。

SELECT * FROM employee WHERE employee.ID NOT IN 
    (SELECT EMPLOYEE_ID FROM  attendance)