我有这些表格:
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。它将显示所有员工。
答案 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)