3

私はこれらのテーブルを持っています:

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>の of<select>要素でリストを表示したい。したがって、カイル、スーザン、ジムが返されます。

正しいクエリを教えてください。または、より良いオプションがあれば、それも良いでしょう。どなたか解法と解説をお願いします。どうもありがとうございました

更新/編集:

また、表 1 に最新の日付がない場合は、現在の日付に基づいています。たとえば、今日は 2013-09-15 です。全従業員を表示します。

4

2 に答える 2

5

これを aleft 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;
于 2013-09-11T11:23:39.077 に答える