Mysql 选择在特定日期可用的教师

Mysql 选择在特定日期可用的教师,mysql,sql,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 -----

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

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在可用性表中没有条目,并且默认情况下所有教师每天都可用,因此我无法使用上述查询列出他/她


有人能帮我找到解决方案吗?

您需要使用左连接:

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
这将返回所有在给定日期的可用表中没有记录的教师

请参阅此链接(表1中不在表2中的所有值)

或者您可以使用“不存在”:

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

谷歌左外或右外可能重复感谢@RickS,我会做的。