选择特定日期可用的教师

时间:2014-04-16 18:22:54

标签: mysql sql

我有一个包含以下字段的教师表

id  |  name
----------------
1   |  Teacher 1
2   |  Teacher 2
3   |  Teacher 3
----------------

另一个名称可用的表

id  |  teacher_id  | date
-------------------------------
1   |  2           | 2014-04-23
2   |  3           | 2014-04-22
-------------------------------

学生可以使用以下查询搜索某一天的教师是否可用

SELECT * 
FROM teachers, available
WHERE available.teacher_id = teachers.id
AND available.date =  "2014-04-23"
LIMIT 0 , 30

直到现在一切都很好。

现在更改是:默认情况下,教师将全天候可用。因此,可用表开始仅存储特定教师不可用的日期。

现在问题是使用以下查询,如果他们在可用性表中有任何条目,我可以获得在特定日期可用的教师。

SELECT * 
FROM teachers, available
WHERE available.teacher_id = teachers.id
AND available.date !=  "2014-04-23"
LIMIT 0 , 30

由于教师1在可用性表中没有条目,并且默认情况下所有教师都可以全天使用,我无法使用上述查询列出他/她。

请问有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您需要使用LEFT JOIN:

SELECT techers.*
FROM
  teachers LEFT JOIN available
  ON teachers.id = available.teacher_id
     AND avaliable.date = '2014-04-23'
WHERE
  available.teacher_id IS NULL

这将返回所有在可用表格中没有记录且具有给定日期的教师。

请参阅此链接,了解ANTI JOIN(table1中所有不在table2中的值)。

或者您可以使用NOT EXISTS:

SELECT *
FROM   teachers
WHERE
  NOT EXISTS (SELECT *
              FROM   available
              WHERE  teachers.id = available.teacher_id
                     AND available.date = '2014-04-23')